【发布时间】:2015-04-25 11:21:21
【问题描述】:
假设我有一个方阵作为输入:
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 内容如下:
通常最好使用布尔掩码。
我该怎么做呢?谢谢。
【问题讨论】:
-
当你提出这类问题时,解释每个变量的大小(例如矩阵的大小、删除的行数等)很重要,因为很多答案的质量取决于这个。
-
@Veedrac 谢谢!我知道。以后我会尽量不忘记。在这种情况下,方阵中的行数永远不会超过 10。
标签: python python-3.x numpy matrix