如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列相关的知识,希望对你有一定的参考价值。
我试图找到一种简洁的方法来遍历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
的使用是如何工作的。任何帮助将非常感激。
答案
只需用这一行替换引发错误的行:
axis
以上是关于如果numpy数组的所有元素都等于某个值,则从numpy数组中删除行/列的主要内容,如果未能解决你的问题,请参考以下文章