【发布时间】:2015-05-31 16:01:09
【问题描述】:
我正在尝试合并一些数据,我有以下两个 2d numpy 数组(a 和 b)
a = [[ 10 9.689474368e-04][ 20 6.88780375e-04]
[ 30 4.296339997e-04][ 40 -1.06232578e-03]
[ 50 -1.219884414e-03][ 60 -1.27936723e-03]]
b = [[ 30 6.687897368e-04][ 40 2.887890375e-04]
[ 50 3.293467897e-04][ 60 -8.067893578e-03]
[ 70 -7.213988414e-03][ 80 -8.278967323e-03]]
我想获得 2 个新的 2d numpy 数组(c 和 d),其中 a 和 b 的第一个列 匹配如下;
c = [[ 30 4.296339997e-04][ 40 -1.06232578e-03]
[ 50 -1.219884414e-03][ 60 -1.27936723e-03]]
d = [[ 30 6.687897368e-04][ 40 2.887890375e-04]
[ 50 3.293467897e-04][ 60 -8.067893578e-03]]
有人知道这样做的优化方法吗?
我尝试过对每个项目进行简单的循环,但是速度不够快,我知道可以通过更优雅的方法来解决它。
我正在使用以下解决方案。它快得多,但不确定它是否是正确的方法。
aHash = map(tuple, a)
bHash = map(tuple, b)
aKey = {x[:1] for x in aHash}
bKey = {x[:1] for x in bHash}
c = np.array([x for x in bHash if x[:1] in aKey])
d = np.array([x for x in aHash if x[:1] in bKey])
谢谢
【问题讨论】:
-
看起来很有趣,但是您尝试过什么? (我们喜欢在这里鼓励学习并阻止懒惰;-)
-
到目前为止不多,只是每个项目上的一个简单循环,但是您可以想象它非常慢.....
-
那么,不要害羞。 (我正在寻找差异,你为什么不扩展我们的目标是什么)。
-
是的,我可以扩展目标,但我认为这无关紧要。我相信这个问题是不言自明的:)