创建具有使用三个1D Numpy数组的值的3D数组

时间:2019-07-04 23:35:53

标签: python arrays numpy

我有3个一维numpy数组xyz

我想使用这些numpy数组的值来创建3D numpy数组(例如result),其值是xy和{{1 }}。我希望z的形状为result( len(x) , len(y) , len(z) )的每个索引中包含的值是从非线性函数(例如result)获得的,该函数使用来自funcxy的相应元素。例如,从z获得result[i,j,k]中包含的值。相同的线性函数用于获取func(x[i] , y[j] , z[k])的所有元素。 最有效的方法是什么?在我的实际工作中,数组resultxy的大小将非常大。

我在下面提供了一个示例代码。该代码使用函数 func = sin(x 2 )•sin(y 2 )•sin(z 2 此函数只是非线性函数的一个示例。我希望代码不特定于上述功能(即,我希望该代码能够使用其他不同的非线性函数。)以下是我现在拥有的代码:

z

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您必须从广播维度上解决这个问题。

使每个数组都沿其自己的轴移动,您将能够直接将公式应用于变量:

import numpy as np

x = np.array([1,2,3])[:,None,None]
y = np.array([4,5,6])[None,:,None]
z = np.array([7,8,9])[None,None,:]

result = np.sin(x**2) + np.sin( y**2 ) + np.sin( z**2 )

print (result)


[[[-0.40018498  1.47359371 -0.07632033]
  [-0.24463342  1.62914527  0.07923124]
  [-1.10406052  0.76971817 -0.78019586]]

 [[-1.99845846 -0.12467977 -1.67459381]
  [-1.8429069   0.03087179 -1.51904224]
  [-2.702334   -0.82855531 -2.37846934]]

 [[-0.82953748  1.04424121 -0.50567283]
  [-0.67398592  1.19979277 -0.35012126]
  [-1.53341302  0.34036567 -1.20954836]]]