gpt4 book ai didi

Python - NumPy - 从数组中删除多行和多列

转载 作者:太空狗 更新时间:2023-10-30 00:49:25 25 4
gpt4 key购买 nike

假设我有一个方阵作为输入:

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 返回一个新数组。有没有更快的方法,涉及同时删除行和列?可以使用掩码吗? documentationnp.delete 上读取:

Often it is preferable to use a boolean mask.

我该怎么做?谢谢。

最佳答案

与其删除不需要的列和行,不如选择您想要的列和行更容易。另请注意,从零开始计算行和列是标准的。为了得到你的第一个例子,你因此想要选择第 0 行和第 3 行以及第 0 行和第 3 行中的所有元素。这需要 advanced indexing ,为此您可以使用 ix_ utility function :

In [25]: np.count_nonzero(a[np.ix_([0,3], [0,3])])  
Out[25]: 0

对于第二个示例,您想要选择第 0 行和第 1 行以及第 0 列和第 1 列,这可以使用 basic slicing 来完成:

In [26]: np.count_nonzero(a[:2,:2])
Out[26]: 3

关于Python - NumPy - 从数组中删除多行和多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com