gpt4 book ai didi

python - 广播 numpy 数组值

转载 作者:行者123 更新时间:2023-12-04 08:20:29 27 4
gpt4 key购买 nike

我有一个带有多个重复项的主要二维 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]]
我尝试创建 pandas 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 ]])

values = np.array([[ 2, -0.5],
[ 2.4, 0.5],
[ 2.5, 0.4],
[ 2.4, 1]])

index = np.argmax((x[:, None] == x_unique).all(-1), axis=1)
values[index]
# array([[ 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)
assert np.allclose(x_unique, x_unique2) # same as above
print(values[index])
# array([[ 2. , -0.5],
# [ 2.4, 0.5],
# [ 2.5, 0.4],
# [ 2. , -0.5],
# [ 2.4, 1. ],
# [ 2.5, 0.4]])

关于python - 广播 numpy 数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65521469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com