ndarray 花式索引与take函数比较

本文通过对比NumPy中take函数与花式索引的方法,选取数组中的部分元素,结果显示take函数性能更优。建议在单轴选取时优先考虑使用take函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In [117]: arr4 = np.random.randn(2000,5)

In [118]: inds = np.random.permutation(2000)[:500] #随机取500个index

In [120]: %timeit arr4[inds] #使用花式索引
16.8 µs ± 38.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [121]: %timeit arr4.take([inds],axis=0) #take函数
6.73 µs ± 37.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [123]: arr4[inds] #二维数组
Out[123]: 
array([[ 1.53280278, -0.2719217 ,  0.42966353, -2.52355042, -0.0312035 ],
       [ 0.11913129,  0.60892999, -1.62264713, -1.34378499,  0.25182348],
       [-1.99468041, -0.21617321, -0.97631606, -1.10507143,  0.81055407],
       ...,
       [ 0.32164417,  0.05819926, -0.50391144, -1.36189419,  0.67204582],
       [ 1.34844867, -1.24891496, -1.10925116, -0.0671594 , -0.71582026],
       [ 0.16707921, -0.22584386, -0.77064574,  0.72433377,  3.23800582]])

In [124]: arr4.take([inds],axis=0) #三维数组,可传入多个数组进行取值
Out[124]: 
array([[[ 1.53280278, -0.2719217 ,  0.42966353, -2.52355042,
         -0.0312035 ],
        [ 0.11913129,  0.60892999, -1.62264713, -1.34378499,
          0.25182348],
        [-1.99468041, -0.21617321, -0.97631606, -1.10507143,
          0.81055407],
        ...,
        [ 0.32164417,  0.05819926, -0.50391144, -1.36189419,
          0.67204582],
        [ 1.34844867, -1.24891496, -1.10925116, -0.0671594 ,
         -0.71582026],
        [ 0.16707921, -0.22584386, -0.77064574,  0.72433377,
          3.23800582]]])



根据测试结果可看出,使用take函数比花式索引的性能要好很多,当设置单个轴向的选区时最好使用take函数而非花式索引。当需要同时选取或修改多个指定元素时,使用花式索引或put函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值