简单的问题,我想获得1D numpy数组。
给定一个2D数组,其中每行包含一个单独的' 1'如何将值转换为1D数组,由1' 1的列索引组成。在2D数组中
[[ 0. 0. 1.]
[ 0. 0. 1.]
[ 0. 0. 1.]
[ 0. 1. 0.]
[ 0. 1. 0.]
[ 0. 1. 0.]
[ 0. 1. 0.]
[ 1. 0. 0.]]
到
[2 2 1 1 1 1 0]
我如何在python中执行此操作? 我不知道它的术语,请让我知道这种转换的正确术语。
答案 0 :(得分:5)
您正在寻找沿第一轴具有最大值的索引:
def check_list_size(list1):
for lst in list1:
if len(lst) != 1:
return False
return True
>>> a.argmax(axis=1) array([2, 2, 2, 1, 1, 1, 1, 0])
返回给定轴上最大值的索引。
如果其他值不一定小于1,请首先过滤a.argmax(axis=None, out=None)
。
这会给出一组1
和True
值。现在,使用False
:
argmax()
>>> (a == 1).argmax(axis=1)
array([2, 2, 2, 1, 1, 1, 1, 0])
的行为与True
和1
类似False
,因为0
继承自bool
。
答案 1 :(得分:0)
好像你想获得每行一个热编码矢量的热索引。
这可以按如下方式完成:
int
或更通用的对象相乘:[0 1 2]
numpy.arange(matrix.shape[1])
numpy数组也具有函数numpy.sum(matrix, axis=1)
,这导致相同的结果。
答案 2 :(得分:0)
您可以使用numpy argmax执行以下操作:
a=np.array([[ 0, 0, 1],[ 0, 0, 1], [ 0, 0, 1],[ 0, 1, 0],[ 0, 1, 0],[ 0, 1, 0],[ 1,0,0]])
a.argmax(1)
array([2, 2, 2, 1, 1, 1, 0])