Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy矢量化是否使用C循环?_Python_Numpy_Vectorization - Fatal编程技术网

Python Numpy矢量化是否使用C循环?

Python Numpy矢量化是否使用C循环?,python,numpy,vectorization,Python,Numpy,Vectorization,我一直在读一些关于numpy的文章/帖子,想知道numpy中的矢量化实际上是如何工作的。一些文章提到了C循环的使用,而另一些文章则谈到了更接近硬件的东西,比如向量指令集。例如,如果我有以下代码: a = np.array([1,2,3]) b = np.array([2,4,6]) M = np.array([[1,2,3],[4,5,6],[7,8,9]]) 我调用以下函数: c = np.dot(a,b) M2 = M@M test_condition = np.where(a >

我一直在读一些关于
numpy
的文章/帖子,想知道
numpy
中的矢量化实际上是如何工作的。一些文章提到了C循环的使用,而另一些文章则谈到了更接近硬件的东西,比如向量指令集。例如,如果我有以下代码:

a = np.array([1,2,3])
b = np.array([2,4,6])
M = np.array([[1,2,3],[4,5,6],[7,8,9]])
我调用以下函数:

c = np.dot(a,b)
M2 = M@M
test_condition = np.where(a > 2, a + 999, a)

然后我假设上述示例中的矢量化函数调用只是一种花哨的说法,即
numpy
调用一个快速编译的C for循环来处理每个元素。是这样,还是有更复杂的事情在幕后进行?

C
for
循环可以编译成硬件矢量化指令。。。当然也可以直接使用。在
numpy
的上下文中,
vectoriation
只意味着使用编译后的功能。这主要是用C语言编写的。根据编译器和硬件的不同,可能会有一些专门的操作,但基本发行版不会这样做。如果安装了数字库(BLAS、ATLAS),有些代码会使用它们。@hpaulj BLAS和ATLAS会使用C来表示循环吗?我想我的问题的核心在于,我认为循环是遍历数组的唯一方法。是的,它是循环,一直向下。但它们大多对我们Python级别的用户隐藏。在大多数情况下,我们使用
numpy
就好像计算是同时在所有元素上进行的一样。C
For
循环可以编译成硬件矢量化指令。。。当然也可以直接使用。在
numpy
的上下文中,
vectoriation
只意味着使用编译后的功能。这主要是用C语言编写的。根据编译器和硬件的不同,可能会有一些专门的操作,但基本发行版不会这样做。如果安装了数字库(BLAS、ATLAS),有些代码会使用它们。@hpaulj BLAS和ATLAS会使用C来表示循环吗?我想我的问题的核心在于,我认为循环是遍历数组的唯一方法。是的,它是循环,一直向下。但它们大多对我们Python级别的用户隐藏。在大多数情况下,我们使用的是
numpy
,就好像是同时对所有元素进行计算一样。