Python 广播numpy数组值
我有一个主要的二维numpy数组,它有多个重复项,还有一个次要数组,它的第一个值是唯一的Python 广播numpy数组值,python,pandas,numpy,Python,Pandas,Numpy,我有一个主要的二维numpy数组,它有多个重复项,还有一个次要数组,它的第一个值是唯一的 [[ 0 0 1 ] [ 1 0 2 ] [ 2 0 2 ] ... [ 0 0 1 ] [ 3 0 2 ] [ 2 0 2 ]] [[ 0 0 1 ] [ 1 0 2 ] [ 2 0 2 ] [ 3 0 2 ]] 第三个二维数组(与第二个数组的行数相同)包含一些额外的值,这些值是从第二个数组中的对应行生成的 [[ 2 -0.5] [ 2.4
[[ 0 0 1 ]
[ 1 0 2 ]
[ 2 0 2 ]
...
[ 0 0 1 ]
[ 3 0 2 ]
[ 2 0 2 ]]
[[ 0 0 1 ]
[ 1 0 2 ]
[ 2 0 2 ]
[ 3 0 2 ]]
第三个二维数组(与第二个数组的行数相同)包含一些额外的值,这些值是从第二个数组中的对应行生成的
[[ 2 -0.5]
[ 2.4 0.5]
[ 2.5 0.4]
[ 2.4 1]]
我想到的是使用第一个数组的值作为键,第三个数组的值作为内容来创建新数组。必须维持秩序
[[ 2 -0.5]
[ 2.4 0.5]
[ 2.5 0.4]
...
[ 2 -0.5]
[ 2.4 1]
[ 2.5 0.4]]
我尝试创建熊猫dfs(一个来自第一个数组,一个来自第二个+第三个数组)并在前3列上合并它们,但结果对于我的需要来说太慢了。通常,您可以使用广播相等来解决此问题,以找到适当的索引,例如:
x=np.array([[0,0,1],
[ 1, 0, 2 ],
[ 2, 0, 2 ],
[ 0, 0, 1 ],
[ 3, 0, 2 ],
[ 2, 0, 2 ]])
x_unique=np.array([[0,0,1],
[ 1, 0, 2 ],
[ 2, 0, 2 ],
[ 3, 0, 2 ]])
value=np.array([[2,-0.5],
[ 2.4, 0.5],
[ 2.5, 0.4],
[ 2.4, 1]])
index=np.argmax((x[:,无]==x_唯一)。all(-1),axis=1)
价值[指数]
#数组([[2.,-0.5],
# [ 2.4, 0.5],
# [ 2.5, 0.4],
# [ 2. , -0.5],
# [ 2.4, 1. ],
# [ 2.5, 0.4]])
如果使用np.unique
生成唯一值,则可以通过在提取唯一值时计算索引来更有效地执行此操作:
x_unique2,index=np.unique(x,axis=0,return_inverse=True)
断言np.allclose(x_unique,x_unique2)#同上
打印(值[索引])
#数组([[2.,-0.5],
# [ 2.4, 0.5],
# [ 2.5, 0.4],
# [ 2. , -0.5],
# [ 2.4, 1. ],
# [ 2.5, 0.4]])
您是否正在使用np.unique
创建第二个数组?非常感谢,它非常有效。事实上,我使用的是np.unique。