如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列

问题描述 投票:1回答:1

我试图找到一种简洁的方法来遍历numpy数组的所有行和所有列,并删除行或列,如果它的所有值都相等,例如qazxsw poi。

假设我有以下数组:

inf

如果我使用,

import numpy as np

m = np.array([[1,2,3,4],
             [np.inf,np.inf,np.inf,np.inf],
             [9,10,11,12]])

我得到的输出,

row = 0
while row < m.shape[0]:
    if np.all(np.isinf(m[row,:])):
        m = np.delete(m,row,axis=0)
        row -= 1
    row += 1

print(m)

我可以使用类似的方法删除所有[[1,2,3,4], [9,10,11,12]] 的列。但是,这种方法非常麻烦,所以我尝试使用以下方法:

infs

这在查找和删除所有m = m[np.all(~np.isinf(m),axis=1)] 的行时效果很好,但是当我尝试以下方法查找并删除包含所有infs的所有列时,该方法会遇到问题,

infs

给出以下错误

m = np.array([[1,2,np.inf,4],
                        [5,6,np.inf,8],
                        [9,10,np.inf,12]])

m = m[np.all(~np.isinf(m),axis=0)]

我原以为使用IndexError: boolean index did not match indexed array along dimension 0; dimension is 3 but corresponding boolean dimension is 4 会沿着每一行搜索,而axis=1会搜索每一列,但似乎我可能不明白axis=0的使用是如何工作的。任何帮助将非常感激。

arrays python-3.x numpy delete-row
1个回答
0
投票

只需用这一行替换引发错误的行:

axis
© www.soinside.com 2019 - 2024. All rights reserved.