肯定是一个0d阵列是标量,但Numpy似乎并不这么认为......我错过了什么或者我只是误解了这个概念?
>>> foo = numpy.array(1.11111111111, numpy.float64)
>>> numpy.ndim(foo)
0
>>> numpy.isscalar(foo)
False
>>> foo.item()
1.11111111111
Run Code Online (Sandbox Code Playgroud) 所以我没有讲一个很长的故事,我正在研究一些代码,我从二进制文件中读取一些数据,然后使用for循环遍历每一个点.所以我完成了代码,它的运行速度非常慢.我从大约128个数据通道循环了大约60,000个点,这需要一分钟或更长时间来处理.这比我预期的Python运行速度要慢.所以我通过使用Numpy使整个事情变得更有效率但是在试图弄清楚为什么原始进程运行得如此之慢以至于我们进行了一些类型检查并发现我在循环Numpy数组而不是Python列表.好吧没有什么大不了的事情让我们的测试设置输入相同我在循环之前将Numpy数组转换为列表.轰炸相同的慢速代码,花了一分钟才能运行,现在耗时10秒.我被淹没了.我唯一的想法是将Numpy数组更改为Python列表我将其更改回来并且它再次变得很慢.我简直不敢相信,所以我得到了更明确的证据
$ python -m timeit -s "import numpy" "for k in numpy.arange(5000): k+1"
100 loops, best of 3: 5.46 msec per loop
$ python -m timeit "for k in range(5000): k+1"
1000 loops, best of 3: 256 usec per loop
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?我知道Numpy数组和Python列表是不同的,但为什么迭代数组中的每个点都要慢得多?
我在运行Numpy 10.1的Python 2.6和2.7中都观察到了这种行为.我相信.