假设我有一个平方矩阵作为输入:
array([[0, 1, 1, 0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 1, 1, 0]])
我想在删除第2行和第3行以及第2列和第3列之后,对数组中的非零进行计数。之后,我想对第3和第4行以及第3和第4列做同样的操作。因此输出应该是:
0 # when removing rows/cols 2 and 3
3 # when removing rows/cols 3 and 4
下面是使用np.delete
的原始解决方案:
import numpy as np
a = np.array([[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]])
np.count_nonzero(np.delete(np.delete(a, (1,2), axis=0), (1,2), axis=1))
np.count_nonzero(np.delete(np.delete(a, (2,3), axis=0), (2,3), axis=1))
但是np.delete
返回一个新数组。有没有一种更快的方法,包括同时删除行和列?可以使用掩蔽吗?np.delete
上的documentation显示:
Often it is preferable to use a boolean mask.
我该怎么做呢?谢谢。
与其删除不需要的列和行,不如更容易选择需要的列和行。还要注意,从零开始计算行和列是标准的。为了获得第一个示例,您需要选择行0和3以及行0和3中的所有元素。这需要advanced indexing,您可以使用ix_ utility function:
对于第二个示例,您希望选择行0和1以及列0和1,这可以使用basic slicing:
不需要通过删除行/列来修改原始数组,以便计算非零元素的数量。只需使用索引
相关问题 更多 >
编程相关推荐