我有一个数组可能是这样的:
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)
但由于某种原因,这段代码似乎什么也没做,尽管执行许多print命令表明所有变量似乎都在正确填充,从而导致代码。
必须有一些简单的方法来“删除任何包含零值的行”
有人能告诉我要写什么代码来完成这个任务吗?
从数组中删除行和列的最简单方法是
numpy.delete
方法。假设我有以下数组
x
:要删除第一行,请执行以下操作:
要删除第三列,请执行以下操作:
因此,可以找到包含0的行的索引,将它们放入列表或元组中,并将其作为函数的第二个参数传递。
这与您最初的方法类似,并且将使用比unutbu's answer更少的空间,但我怀疑它会更慢。
顺便说一下,您的行
p.delete()
对我不起作用-ndarray
没有.delete
属性。这里有一个一行程序(是的,它类似于user333700,但更简单一点):
顺便说一下,这种方法比大型矩阵的掩模阵列方法快得多。对于2048x 5矩阵,此方法大约快1000倍。
顺便说一下,user333700的方法(从他的评论中)在我的测试中稍微快了一点,尽管它让我困惑为什么。
相关问题 更多 >
编程相关推荐