Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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在两个二维数组上迭代_Python_Arrays_Numpy_Vectorization - Fatal编程技术网

Python numpy在两个二维数组上迭代

Python numpy在两个二维数组上迭代,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,假设我有两个矩阵: X, Y = np.meshgrid(np.arange(0, 2, 0.1), np.arange(3, 5, 0.1)) 还有一个函数,比如: def func(x) : return x[0]**2 + x[1]**2 如何填充矩阵Z(大小为np.shape(X)),其中每个条目是通过调用func对X和Y的两个对应值形成的,即: Z[i, j] = func([X[i, j], Y[i, j]]) 有没有不使用双嵌套for循环的方法?对于给定的numpy数

假设我有两个矩阵:

X, Y = np.meshgrid(np.arange(0, 2, 0.1), np.arange(3, 5, 0.1))
还有一个函数,比如:

def func(x) :
    return x[0]**2 + x[1]**2
如何填充矩阵
Z
(大小为np.shape(X)),其中每个条目是通过调用
func
X
Y
的两个对应值形成的,即:

Z[i, j] = func([X[i, j], Y[i, j]])

有没有不使用双嵌套for循环的方法?

对于给定的numpy数组
X
Y
,您可以这样做-

Zout = X**2 + Y**2
如果您实际上是这样构造
X
Y
,那么有一种直接的方法可以获得
Z
,从而避免
np.meshgrid
,就像这样-

Zout = np.arange(0, 2, 0.1)**2 + np.arange(3, 5, 0.1)[:,None]**2

对于给定的numpy数组
X
Y
,您可以-

Zout = X**2 + Y**2
如果您实际上是这样构造
X
Y
,那么有一种直接的方法可以获得
Z
,从而避免
np.meshgrid
,就像这样-

Zout = np.arange(0, 2, 0.1)**2 + np.arange(3, 5, 0.1)[:,None]**2

这也是功能评估的矢量化形式:

import numpy as np
X, Y = np.meshgrid(np.arange(0, 2, 0.1), np.arange(3, 5, 0.1))
def func(x) :
    return x[0]**2 + x[1]**2

Z = func([X,Y])

这也是功能评估的矢量化形式:

import numpy as np
X, Y = np.meshgrid(np.arange(0, 2, 0.1), np.arange(3, 5, 0.1))
def func(x) :
    return x[0]**2 + x[1]**2

Z = func([X,Y])

代码中有一个输入错误
x**[1]
。这不就是
Z=func([x,Y])
?最好避免小数范围(如
np.arange(0,2,0.1)
),因为浮点不准确可能导致无法预测的端点。改为使用
linspace
。代码中有一个打字错误
x**[1]
。这不就是
Z=func([x,Y])
?最好避免小数范围(如
np.arange(0,2,0.1)
),因为浮点不准确可能导致无法预测的端点。改用
linspace
。我的意思是针对任意函数,但您的答案仍然非常有用。你能解释一下[:,None]是做什么的吗?@Tom,其中一个是通过引入一个新的无轴来扩展维度。因此,在这种情况下,我们用它将一维转换为二维。扩展维的想法是引入。我的意思是对于任意函数,但是你的答案仍然是非常有用的。你能解释一下[:,None]是做什么的吗?@Tom,其中一个是通过引入一个新的无轴来扩展维度。因此,在这种情况下,我们用它将一维转换为二维。在这里,扩展维度的想法是引入。