python花式索引_python – numpy的花式索引如何工作?

我正在对2D列表和numpy数组进行一些实验.由此,我提出了3个问题,我很想知道答案.

首先,我初始化了一个2D python列表.

>>> my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

然后我尝试使用元组索引列表.

>>> my_list[:,]

Traceback (most recent call last):

File "", line 1, in

TypeError: list indices must be integers, not tuple

由于解释器抛出了一个TypeError而不是一个SyntaxError,我猜测它实际上可以这样做,但是python本身并不支持它.

然后我尝试将列表转换为numpy数组并执行相同的操作.

>>> np.array(my_list)[:,]

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

当然没问题.我的理解是,其中一个__xx __()方法已被覆盖并在numpy包中实现.

Numpy的索引也支持列表:

>>> np.array(my_list)[:,[0, 1]]

array([[1, 2],

[4, 5],

[7, 8]])

这提出了几个问题:

>哪个__xx__方法有numpy覆盖/定义来处理花式索引?

>为什么python列表本身不支持花式索引?

此外,我运行此代码来比较python2与python3上的拼接性能.

import timeit

print(timeit.timeit("list_1[:][:]",

setup="list_1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]"))

print(timeit.timeit("list_2[:,]",

setup="import numpy as np; list_2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])"))

Python2(运行版本1.8.0rc1):

0.352098941803

1.24272298813

Python3(运行版本1.12.0):

0.23113773498334922

0.20699498101021163

这让我想到:

>为什么numpy的幻想索引在python2上如此之慢?是因为我在这个版本中没有本地BLAS支持numpy吗?

如果我能澄清任何事情,请告诉我.谢谢.

编辑

在python2上配置numpy:

>>> np.show_config()

...

blas_opt_info:

extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']

extra_compile_args = ['-msse3', '-I/BuildRoot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.Internal.sdk/System/Library/Frameworks/vecLib.framework/Headers']

define_macros = [('NO_ATLAS_INFO', 3)]

...

lapack_opt_info:

extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']

extra_compile_args = ['-msse3']

define_macros = [('NO_ATLAS_INFO', 3)]

...

和python3一样:

>>> np.show_config()

....

blas_opt_info:

extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']

extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']

define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]

....

lapack_opt_info:

extra_compile_args = ['-msse3']

extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']

define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值