Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 广播numpy数组值_Python_Pandas_Numpy - Fatal编程技术网

Python 广播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

我有一个主要的二维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.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。