1

似乎我无法在 Numpy 中解决这个问题:我有一个矩阵,具有任意数量的维度,以任意方式排序。在这个矩阵里面,总有一个维度是我感兴趣的(就像我说的,这个维度的位置并不总是一样的)。现在,我想沿着这个维度找到第一个非零值。事实上,我需要该值的索引来对值本身执行一些操作。一个例子:如果我的矩阵an x m x p并且我感兴趣的维度是数字 1,我会做类似的事情:

for ii in xrange(a.shape[0]):
   for kk in xrange(a.shape[2]):
      myview = np.squeeze(a[ii, :, kk])
      firsti = np.nonzero(myview)[0][0]
      myview[firsti] = dostuff

除了性能考虑之外,我真的不知道如何在具有不同数量的维度以及对任意位置感兴趣的维度上做到这一点。

4

1 回答 1

0

你可以滥用np.argmax你的目的。在这里,您可以指定axis您感兴趣的0内容、沿列的位置、1沿行的位置等。您只需要一个包含所有非零元素的相同值的数组。您可以通过这样做来实现a != 0,因为这将包含所有零元素的 ( Falsemeaning )0和所有非零元素的True(meaning 1)。现在将为您提供沿轴np.argmax(a != 0, axis=1)的第一个非零元素。1

例如:

import numpy as np

a = np.array([[0, 1, 4],[1, 0, 2],[0, 0, 1]])
# a = [[0, 1, 4],
#      [1, 0, 2],
#      [0, 0, 1]]

print(np.argmax(a!=0, axis=0))
# >>> array([1, 0, 0]) -> along columns

print(np.argmax(a!=0, axis=1))
# >>> array([1, 0, 2]) -> along rows

这也适用于更高的维度,但输出的指导性较差,因为很难想象。

于 2016-08-26T10:47:58.913 回答