我有一个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解决方案?
答案 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
如果您可以保证每行只有一个1
,只需从numpy.where
的输出中获取列即可:
np.where(a==1)[1]
array([5, 0, 2, 4, 2, 6], dtype=int64)