我有一个0和1的numpy数组。 我需要在一次pythonic移动中提取所有由0组成的行,并保留其余行。
我已经找过以前的问题来回答这个问题 这个问题是这个问题的复本: Remove all-zero rows in a 2D matrix
但我不明白任何答案。看起来重要的命令是:
a[~(a==0).all(1)]
但我根本不明白它是如何提取矩阵的。实际上,当我在代码中使用这一行时,它会提取一个数组,而不是二维矩阵。
我看过np.all()
explanation,
但看起来只是个测试。
有人能帮我一下吗。
与代码行
a[~(a==0).all(1)]
相关联的主要问题是,它对numpy.array
有效,而且似乎您正在使用numpy.matrix
,而代码并不是很有效。如果a
是numpy.matrix
,则使用a[~(a==0).all(1).A1]
。既然您是numpy新手,我将指出,通过将复杂的单行代码分解成单个步骤并打印中间结果,可以更好地理解它们。这通常是调试的第一步。我将对
a[~(a==0).all(1)]
行和numpy.matrix
行执行此操作。对于a
numpy.array
:对于a
numpy.matrix
:In[5]
的输出显示了这不起作用的原因:(a==0).all(1)
生成一个不能用于索引行的2D结果。因此,我在下一行中附加了.A1
,将其转换为1DHere很好地回答了数组和矩阵之间的区别。此外,我还要补充的是,一旦完全采用infix operator,使用
numpy.matrix
几乎没有任何优势。另外,由于大多数人在代码中使用numpy.array
来表示矩阵,他们经常将numpy.array
描述为“矩阵”,从而在术语上造成混乱。最后,作为旁白,我将注意到以上所有操作都是在命令行的ipython中完成的。IPython是这类工作的优秀工具。
这是一个有效的例子,可能不是最有效的:
在这里,您将提取列表中具有索引号的行。使用满足x.any()的行的索引号创建该列表,据我所知,如果行中的每个值都为0,则该列表将给出“False”。
相关问题 更多 >
编程相关推荐