gpt4 book ai didi

python - 在大小不等的数组上有效地将值从一个 ndarray 复制到另一个

转载 作者:行者123 更新时间:2023-12-04 01:17:58 24 4
gpt4 key购买 nike

我有两个不同大小的数组,但我试图用匹配“键”上的第二个数组中的值覆盖第一个数组中的某些值。我的实际问题可能有很多很多行,我已经确定这是目前我的程序的瓶颈。

编辑:我没有意识到 a1 中可能存在重复值,应该保持重复。我在 np.array 示例中添加了一个这样的示例。

例子:

import numpy as np

# first two columns are 'keys', overwrite the 3rd column in a1 with the 3rd column from a2
# some values may be missing from a2. Those should keep the value in a1

a1 = np.array([[ 0.0, 2.0, 10.0 ],
[ 0.0, 2.0, 10.0 ],
[ 0.0, 3.0, 10.0 ],
[ 1.0, 3.0, 10.0 ],
[ 1.0, 13.0, 10.0 ],
[ 2.0, 2.0, 10.0 ],
[ 2.0, 5.0, 10.0 ]])

a2 = np.array([[ 0.0, 2.0, 0.0 ],
[ 0.0, 3.0, 0.713 ],
[ 1.0, 3.0, 0.713 ],
[ 1.0, 13.0, 1.0 ],
[ 2.0, 2.0, 0.0 ]])

# wanted result:
np.array([[ 0.0, 2.0, 0.0 ],
[ 0.0, 2.0, 0.0 ],
[ 0.0, 3.0, 0.713 ],
[ 1.0, 3.0, 0.713 ],
[ 1.0, 13.0, 1.0 ],
[ 2.0, 2.0, 0.0 ],
[ 2.0, 5.0, 10.0 ]])

当我执行这种蛮力操作时,我会简单地获取 a2 中的每一行并遍历 a1 中的每一行以替换匹配项上的值,但是有没有办法这样做运行效率更高?某种方式来矢量化至少一个循环上的操作?我的实际情况涉及两个数组中的许多行,这需要很长时间。

最佳答案

您会考虑使用 Pandas 等其他软件包吗?

import pandas as pd

d2 = pd.DataFrame(a2).set_index([0,1])
d1 = pd.DataFrame(a1).set_index([0,1])

d1.update(d2)
d1.reset_index().values

输出:

array([[ 0.   ,  2.   ,  0.   ],
[ 0. , 2. , 0. ],
[ 0. , 3. , 0.713],
[ 1. , 3. , 0.713],
[ 1. , 13. , 1. ],
[ 2. , 2. , 0. ],
[ 2. , 5. , 10. ]])

关于python - 在大小不等的数组上有效地将值从一个 ndarray 复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63018603/

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