按行排列的Numpy掩码

2024-05-16 12:58:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有二维阵列:

matrix =np.array([[95,90,-1,55],[100,90,-1,80],[0,90,85,100]])

我尝试选择2个随机行,忽略-1

我试过:

random_ints = np.random.choice(len(matrix), size=2, replace=False)
students = matrix[random_ints, :]
ignored = students[students != -1]

但被忽略的var被重塑为1D数组,例如:

[95,90,55,100,90,80]

我想要忽略保存的2D,例如:

[[95,90,55],[100,90,80]]

你怎么能这么做


Tags: falsesizelenvarnprandom数组array
1条回答
网友
1楼 · 发布于 2024-05-16 12:58:13

如果在中有相等的要保留的元素数(!=-1) 每行,您都可以运行:

np.apply_along_axis(lambda row: row[row != -1], 1, students)

要检查此变量,请设置random_ints = np.array([0,1]),选择just 将上述行添加到学生并运行上述代码

但是如果这些元素的数量不同,Numpy将 引发异常:

ValueError: could not broadcast input array from shape (3) into shape (4)

原因是(在本例中)某些行有4个元素 左,而其他-仅3

不幸的是,Numpy不支持“锯齿”数组(具有不同的 每行中的元素数)

您可以得到类似于您想要的的内容,但作为嵌套列表 (不是一个Numpy数组):

result = []
for row in students:
    result.append(row[row != -1].tolist())

结果(对于2行和1行)为:

[[0, 90, 85, 100], [100, 90, 80]]

相关问题 更多 >