Python 使用切片的numpy数组分配

Python 使用切片的numpy数组分配,python,numpy,Python,Numpy,如果b是一个2x2 np.ndarray并且执行了以下赋值,numpy在后台做什么,即它是先将列表[100100]转换为numpy数组,还是直接使用列表[100100]填充b的第一行中的值: b[1,:] = [100,100] 我可以在文档中的什么地方找到更多关于这方面的信息 b[1,:]=[100100]与 b[1,0] = 100 b[1,1] = 100 但是,由于它使用已编译的循环,因此执行速度更快。 (第二个需要在赋值之前转换为ndarray数据类型)。要评估执行速度,我们将使

如果b是一个2x2 np.ndarray并且执行了以下赋值,numpy在后台做什么,即它是先将列表[100100]转换为numpy数组,还是直接使用列表[100100]填充b的第一行中的值:

 b[1,:] = [100,100]

我可以在文档中的什么地方找到更多关于这方面的信息

b[1,:]=[100100]

b[1,0] = 100
b[1,1] = 100
但是,由于它使用已编译的循环,因此执行速度更快。
(第二个需要在赋值之前转换为ndarray数据类型)。

要评估执行速度,我们将使用库

您可以对此进行测试,您会注意到numpy循环的速度要快两倍:

- numpy way : 0.97758197784423828
- Python way: 2.1633858680725098
这是因为有一个阶段,
中的整数(无限整数)被转换为64位的浮点。为了仅比较回路的速度,可在设置中初步完成类型转换:

values = np.array([i for i in xrange(100)], dtype=np.float64)
以下是我得到的:

numpy way : 0.131125926971
Python way: 2.64055013657
我们注意到numpy循环比Python循环快20倍


如果你想知道numpy是否是开源的,你会发现更多的信息,如果你想知道一些东西是如何实现的,只要看看源代码就可以了。答案是“这取决于”。查看Numpy发行版中的
core/src/multiarray/sequence.c
array\u assign\u slice
:)。在您的示例中,我认为代码不会将列表转换为数组,但根据其他情况,它可能会转换为数组。@goncalopp是的,我担心内存使用情况。@Bakuriu我很清楚这一点,但我询问stackoverflow,希望有人对此有所了解。否则,任何与python相关的问题都可以通过查看源代码来回答,因此您可能认为这里不需要python标记?@chmate我不知道--您可以查看代码,但通过快速阅读,似乎只要目标维度大于源维度,就会创建一个numpy数组:
a=numpy.empty((2,3));例如,a[:]=范围(3)
。我可能错了。文件里有这个吗?如果是这样的话,您能提供一个链接,链接到记录这些信息的地方吗?谢谢,如果文档中有,请告诉我。什么是编译循环?您好,我正在谈论解释语言和编译语言之间的区别。众所周知,Python可以一个命令一个命令地执行,这与编译的C或Java不同。众所周知,numpy是一种与Python一起工作但作为编译程序运行的接口。下面的答案给出了一个关于循环性能的示例。
numpy way : 0.131125926971
Python way: 2.64055013657