Python 按行排列的Numpy掩码

Python 按行排列的Numpy掩码,python,numpy,Python,Numpy,我有二维阵列: 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数组,例如:

我有二维阵列:

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]
[[95,90,55],[100,90,80]]
我想要忽略保存的2D,例如:

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

如何做到这一点呢?

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

np.apply_along_axis(lambda row: row[row != -1], 1, students)
要检查此变量,请设置
random\u ints=np.array([0,1])
,选择just 将上面的行发送给学生并运行上面的代码

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

ValueError: could not broadcast input array from shape (3) into shape (4)
原因是(在本例中)某些行有4个元素 左,而其他-仅3

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

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

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


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

np.apply_along_axis(lambda row: row[row != -1], 1, students)
要检查此变量,请设置
random\u ints=np.array([0,1])
,选择just 将上面的行发送给学生并运行上面的代码

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

ValueError: could not broadcast input array from shape (3) into shape (4)
原因是(在本例中)某些行有4个元素 左,而其他-仅3

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

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

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


当一行有两个-1而另一行只有一个-1时会发生什么?输出应该是[[95,90],[100]],这不是有效的numpy数组。这就是遮罩无法保持形状的原因。当一行有两个-1,而另一行只有一个-1时会发生什么?输出应该是[[95,90],[100]],这不是有效的numpy数组。这就是面具不能保持形状的原因。