我想从矩阵中删除所有零,因此将删除包含零的每一行或每一列。 像这样: 输入是这个矩阵:
np.array([
[1, 2, 3, 4, 5],
[6, 0, 8 ,9,10],
[11,12,13,14,15],
[16, 0, 0,19,20]])
三个零应该导致第 1 和第 3 行(从零开始的索引)和第 1 和第 2 列被删除。输出矩阵应为:
np.array([
[ 1, 4, 5],
[11,14,15]])
到目前为止我试过这个:
for i in range(0,len(Matrix)):
Matrix[Matrix[:,i]!=0]
for i in range(len(Matrix),0):
Matrix[Matrix[i,:]!=0]
最佳答案
您可以使用 np.ix_
来处理索引魔法:
In [26]: arr = np.array([[1,2,3,4,5],[6,0,8,9,10],[11,12,13,14,15],[16,0,0,19,20]])
In [27]: mask = arr != 0
In [28]: arr[np.ix_(mask.all(1), mask.all(0))]
Out[28]:
array([[ 1, 4, 5],
[11, 14, 15]])
有问题的索引魔术是 np.ix_
会将 bool 数组转换为每个轴的正确索引:
In [29]: mask.all(1)
Out[29]: array([ True, False, True, False])
In [30]: mask.all(0)
Out[30]: array([ True, False, False, True, True])
In [31]: np.ix_(mask.all(1), mask.all(0))
Out[31]:
(array([[0],
[2]]), array([[0, 3, 4]]))
这真的一点也不神奇,它很有效
In [34]: np.arange(len(mask.all(1)))[mask.all(1)]
Out[34]: array([0, 2])
在幕后。
关于python - 从矩阵中删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710872/