创建3D数组,其值使用三个1D Numpy数组



我有3个一维numpy数组xyz

我想使用这些Numpy数组的值创建一个3D Numpy数组(例如result(,其值是xyz中包含的值的函数。我希望result的形状为( len(x) , len(y) , len(z) )result的每个索引中包含的值是从非线性函数(例如func(获得的,该函数使用xyz中的相应元素。例如,result[i,j,k]中包含的值是从func(x[i] , y[j] , z[k])获得的。相同的线性函数用于获得result的所有元素。这样做的最有效方法是什么?在我的实际工作中,阵列xyz的尺寸非常大。

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

import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
z = np.array([7,8,9])
def func( xval, yval, zval ):
    return np.sin(xval**2) + np.sin( yval**2 ) + np.sin( zval**2 )
results = np.zeros( shape=( len(x) , len(y) , len(z) ) )
for i in range(len(x)):
    for j in range(len(y)):
        for k in range(len(z)):
            results[i,j,k] = func( x[i], y[j], z[k] )

任何帮助将不胜感激。

您必须通过广播维度来处理此问题。

使您的每个数组都沿着自己的轴线置于自己的轴上,您将能够将公式直接应用于变量:

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]]]

最新更新