假设我有以下两个数组:
a = array([(1, 'L', 74.423088306605), (5, 'H', 128.05441039929008),
(2, 'L', 68.0581377353869), (0, 'H', 88.15726964130869),
(4, 'L', 97.4501582588212), (3, 'H', 92.98550136344437),
(7, 'L', 87.75945631669309), (6, 'L', 90.43196739694255),
(8, 'H', 111.13662092749307), (15, 'H', 91.44444608631304),
(10, 'L', 85.43615908319185), (11, 'L', 78.11685661303494),
(13, 'H', 108.2841293816308), (17, 'L', 74.43917911042259),
(14, 'H', 64.41057325770373), (9, 'L', 27.407214746467943),
(16, 'H', 81.50506434964355), (12, 'H', 97.79700070323196),
(19, 'L', 51.139258140713025), (18, 'H', 118.34835768605957)],
dtype=[('id', '<i4'), ('name', 'S1'), ('value', '<f8')])
b = array([ 0, 3, 5, 8, 12, 13, 14, 15, 16, 18], dtype=int32)
我想从a
中选择元素,其中id
在b
中给定。也就是说,b
不是索引数组。它包含观测值的ids
。我怎么能在纽比做这个?
谢谢你的帮助。
你应该得到你想要的
下面的方法比Francesco对示例数组的方法快几倍:
要了解它的工作原理,请看一下:
它是一个数组,其行数与
b
中的元素数相等,列数与a
中的元素数相等。np.argmax
然后找到每行中第一个True
的位置,这是a['id']
中b
对应元素第一次出现的索引。如上所示,对于小数组,这在性能上胜过python。但是如果
a
或b
变得太大,那么bool
s中间数组的大小可能会削弱性能。而且,np.argmax
必须搜索整行,它永远不会提前脱离循环,如果a
太长,这不是一件好事。我对使用类似方法的this question做了一些计时,对于中等大小的数组来说,这仍然是一条路。弗朗西斯科的方法绝对不那么老套,更容易理解,而且对于一个样本大小的数组来说,性能差异是无关紧要的,我必须承认。但这并不能让你感觉像this。。。
只要数组中的id和行一样多。
相关问题 更多 >
编程相关推荐