繁体   English   中英

numpy nonzero()返回按行索引排序的索引?

[英]numpy nonzero() returns indexes sorted by row index?

与Matlab中一样, nonzeros返回按列排序的索引。 NumPy ,似乎返回的索引按行排序(对于2D矩阵)。 但这未在其文档中阐明。

因此,可以安全地假设这一点吗?

一个例子:

test = np.array([[0,2], [3,0]])
test[test.nonzero()]

给出array([2, 3])而不是array([3, 2])

关于PyArray_NonZero的C源代码(该函数处理所有对nonzero的调用)有以下注释:

/*NUMPY_API
 * Nonzero
 *
 * TODO: In NumPy 2.0, should make the iteration order a parameter.
 */
NPY_NO_EXPORT PyObject *
PyArray_Nonzero(PyArrayObject *self)

现在,将迭代顺序硬编码为C顺序 ,即对于2D情况,最后一个索引变化最快,即排序的行然后是列。 根据该评论,可以非常安全地假设,如果这种情况发生改变,将通过提供默认为当前行为的新功能来实现。

是的,numpy数组可以处理行,然后处理列索引。 如果要以更Matlab的方式工作,则可以使用转置数组。 例如。

test.T[test.T.nonzero()]

T属性提供了数组的转置视图 因此,行变成列,而列变成行。 而且由于数组是视图而不是副本,所以它也是非常便宜的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM