Arrays 将大小为n的numpy数组转换为标量,子项索引号作为标量值

Arrays 将大小为n的numpy数组转换为标量,子项索引号作为标量值,arrays,python-3.x,numpy-ndarray,scalar,Arrays,Python 3.x,Numpy Ndarray,Scalar,我想转换一个numpy数组 a = array([[1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0]]) 转换为以子项索引号作为标量值的标量 所需输出 a1 = array([[1],[1],[3],[3],[6],[4]]) 我试过

我想转换一个numpy数组

a =    array([[1, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 1],
       [0, 0, 0, 1, 0, 0]])
转换为以子项索引号作为标量值的标量

所需输出

a1 = array([[1],[1],[3],[3],[6],[4]])
我试过这个方法:

a1 = []
for item in a:
    a1.append(np.where(item==1))
我得到这个输出:

a1 = [(array([0]),),
 (array([0]),),
 (array([2]),),
 (array([2]),),
 (array([6]),),
 (array([4]),)]

有没有一种更像蟒蛇的方法来实现它?

在仔细阅读了这个问题之后,我认为这一行应该 以一种更为通俗的方式解决您的问题:

np.where(a==1)[1].reshape((a.shape[0],1))
如果您喜欢从
1
开始索引,而不是从
0
(这在您想要的输出中很明显),那么您只需在上面的行中添加
1
,即

np.where(a==1)[1].reshape((a.shape[0],1)) + 1
请注意,上面的示例输出中最后两个元素似乎有错误