Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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_Numpy - Fatal编程技术网

Python Numpy操作二维阵列以生成三维阵列

Python Numpy操作二维阵列以生成三维阵列,python,numpy,Python,Numpy,我已经生成了一个包含(x,y)值的numpy数组,作为nxn网格 grid = np.meshgrid(np.linspace(0, 1, 50), np.linspace(0, 1, 50))[0] grid.shape // (50, 50, 1) 我有一个函数,它接受两个参数并返回3个值。 i、 e.(x,y)->(a,b,c) 如何在2d numpy数组上应用该函数以获得3d numpy数组?如果我理解正确,您需要的是np.vectorizedecorator。通过使用它,您可以在m

我已经生成了一个包含
(x,y)
值的numpy数组,作为
nxn
网格

grid = np.meshgrid(np.linspace(0, 1, 50), np.linspace(0, 1, 50))[0]
grid.shape  // (50, 50, 1)
我有一个函数,它接受两个参数并返回3个值。 i、 e.
(x,y)->(a,b,c)


如何在2d numpy数组上应用该函数以获得3d numpy数组?

如果我理解正确,您需要的是
np.vectorize
decorator。通过使用它,您可以在
meshgrid
上应用函数。但是,函数应该只接受一个参数,因为不传递坐标,而是传递坐标处的值(除非值是带有两个元素的薄纱)


如果您的函数真的需要两个参数,您可能不希望将2d映射到3d,而是希望将2xMxN映射到3xMxN。为此,请将第一行更改为

gridx, gridy = np.meshgrid(np.linspace(0, 1, 50), np.linspace(0, 1, 50))
或者甚至使用更经济的
ix
,其优点是不交换轴

gridy, gridx = np.ix_(np.linspace(0, 1, 50), np.linspace(0, 1, 50))
如果函数
f
不处理数组参数,那么正如@Jacques Gaudin指出的
np.vectorize
可能就是您想要的。请注意,
vectorize
主要是一个方便的功能,它不会让事情变得更快。它可以做一些有用的事情,比如广播,这就是为什么使用
ix\ux
实际上是有效的

f_wrapped = np.vectorize(f)
result = f_wrapped(gridy, gridx)
请注意,
result
在您的示例中是一个由50 x 50个数组组成的3元组,即按输出分组。如果要链接矢量化函数,这很方便。如果您想将所有数据都放在一个大数组中,只需将
结果
转换为
数组
,并可以选择使用
转置
来重新排列轴,例如

 triplets_last = np.array(result).transpose((1, 2, 0))

我不清楚
(x,y)
值数组在
nxn
网格上是什么样子的。。。这是否意味着您有一个二维元组数组?
 triplets_last = np.array(result).transpose((1, 2, 0))