ndarray 花式索引与take函数比较

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函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值