删除numpy数组中的行

我有一个数组,可能看起来像这样:

ANOVAInputMatrixValuesArray = [[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 0.53172222], [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]] 

注意其中一行在最后有一个零值。 我想删除任何包含零的行,同时保留所有单元格中包含非零值的行。

但是,每次填充时,数组的行数都不相同,而且每次都将位于不同的行中。

我用下面这行代码得到了每一行中非零元素的数量:

 NumNonzeroElementsInRows = (ANOVAInputMatrixValuesArray != 0).sum(1) 

对于上面的数组, NumNonzeroElementsInRows包含:[5 4]

这五个表示行0中的所有可能的值都是非零,而四则表示行1中的一个可能的值是零。

因此,我试图使用下面的代码行来查找和删除包含零值的行。

 for q in range(len(NumNonzeroElementsInRows)): if NumNonzeroElementsInRows[q] < NumNonzeroElementsInRows.max(): p.delete(ANOVAInputMatrixValuesArray, q, axis=0) 

但由于某种原因,这段代码似乎没有做任何事情,即使执行了大量的打印命令,表明所有的variables似乎都正确地填充到代码中。

必须有一些简单的方法来简单地“删除任何包含零值的行”。

任何人都可以告诉我要写什么代码来完成这个?

4 Solutions collect form web for “删除numpy数组中的行”

从数组中删除行和列的最简单方法是numpy.delete方法。

假设我有下面的数组x

 x = array([[1,2,3], [4,5,6], [7,8,9]]) 

要删除第一行,请执行以下操作:

 x = numpy.delete(x, (0), axis=0) 

要删除第三列,请执行以下操作:

 x = numpy.delete(x,(2), axis=1) 

所以你可以find其中有0的行的索引,把它们放在一个列表或一个元组中,并将其作为函数的第二个parameter passing。

这里是一个class轮(是的,它类似于user333700的,但更直接一点):

 >>> import numpy as np >>> arr = np.array([[ 0.96488889, 0.73641667, 0.67521429, 0.592875, 0.53172222], [ 0.78008333, 0.5938125, 0.481, 0.39883333, 0.]]) >>> print arr[arr.all(1)] array([[ 0.96488889, 0.73641667, 0.67521429, 0.592875 , 0.53172222]]) 

顺便说一下,这种方法比大型matrix的蒙板数组方法要快得多。 对于2048 x 5的matrix,这种方法快了大约1000倍。

顺便说一句,user333700的方法(从他的评论)在我的testing中稍微快一点,尽pipe这令我难以理解。

这和你原来的方法很相似,比unutbu的答案占用的空间要less ,但是我怀疑它会比较慢。

 >>> import numpy as np >>> p = np.array([[1.5, 0], [1.4,1.5], [1.6, 0], [1.7, 1.8]]) >>> p array([[ 1.5, 0. ], [ 1.4, 1.5], [ 1.6, 0. ], [ 1.7, 1.8]]) >>> nz = (p == 0).sum(1) >>> q = p[nz == 0, :] >>> q array([[ 1.4, 1.5], [ 1.7, 1.8]]) 

顺便说一句,你的行p.delete()不适合我 – ndarray没有.delete属性。

numpy提供了一个简单的函数来完成同样的事情:假设你有一个被屏蔽的数组“a”,调用numpy.ma.compress_rows(a)将删除包含一个被屏蔽值的行。 我想这样的速度要快得多

  • PIL:缩略图,并以方形图像结束
  • 如何获得一个函数名称作为Python中的字符串?
  • 如何validation一个string只包含字母,数字,下划线和破折号?
  • 用Django 1.7加载初始数据和数据迁移
  • Python名称错误:名称未定义
  • 如何以编程方式设置全局(模块)variables?
  • 如何将多个列表合并到Python中的一个列表?
  • Python的关机程序在哪里被logging?
  • 如何将Vector分割成列 - 使用PySpark
  • 如何从代码configurationnltk数据目录?
  • Pycharm:为运行manage.py任务设置环境variables