我试图找到一种简洁的方法来遍历numpy数组的所有行和所有列,并在一行或一列的所有值都等于例如inf
的情况下删除行或列。 / p>
假设我有以下数组:
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
会沿着每一列进行搜索,但是似乎我可能不了解axis
的使用原理。任何帮助将不胜感激。
答案 0 :(得分:0)
只需用这一行替换引发错误的行:
m = m[:, np.all(~np.isinf(m),axis=0)]