使用另一个Numpy数组的索引制作新的Numpy数组

时间:2018-12-07 16:10:28

标签: arrays numpy element

我有一个10 x N的数组,如下所示:

[[ 0.  1.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  1.  0.  0.]
 [ 1.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  1.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  1.]
 [ 0.  0.  0. ...,  0.  0.  1.]]

我想要以下1 x N格式的Numpy数组,其中新数组中的每个元素都是在10 x N数组中填充为“ 1”的索引的值。

例如,该过程会将上面的内容转换为数组:

[[ 1.  7.  0. ...,  7,  9.  9.]]

我在使用该功能方面取得了一些成功:

np.where(array > 0)[0][0]

这为我的最终数组提供了一个值,但是我以所需格式填充数组的尝试未成功。此外,我的实现不是很pythonic。是否有针对上述问题的pythonic解决方案?

1 个答案:

答案 0 :(得分:1)

设置

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

您只关心,因为第二个数组是1D,现在您正在从numpy.where

抓取 row

如果您可以保证每行只有一个1,只需从numpy.where的输出中获取列即可:

np.where(a==1)[1]

array([5, 0, 2, 4, 2, 6], dtype=int64)