Julia:通过向量上的广播/点操作生成多维数组

时间:2018-02-09 21:35:58

标签: multidimensional-array julia

我正在尝试使用广播将函数的值存储到三维数组中。下面我用一个简单的例子来说明我想要做的事情。

我们假设我们有一个函数f,它返回三个输入值和三个向量XYZ的值,用于存储输入值:

f = (x, y, z)-> x^2+y^2+z^2
X, Y, Z = randn(100), randn(100), randn(100)

评估存储在三个向量fXY中的值的所有可能组合的Z,然后将结果存储为三维数组,我们可以这样做:

[f(x,y,z) for x in X, y in Y, z in Z]

但是,我想避免使用for循环并使用点运算符或广播。所以,我写了以下内容:

broadcast(z->f.(X, Y', z), Z)

然而,它的问题是结果变成了二维数组的一维数组。

是否有一种有效的方法来评估f存储在向量XYZ中的值的所有可能组合,并将结果放在三维中不使用for循环的数组?

我不想使用for循环,因为我考虑将来将代码放在GPU上,似乎GPU计算不适用于for循环。

谢谢!

1 个答案:

答案 0 :(得分:2)

最简单的是向Z添加第三个维度,例如:

f.(X,Y',reshape(Z, 1, 1, 100))

或直接生成适当尺寸的数据:

X, Y, Z = randn(100), randn(1,100), randn(1,1,100)
f.(X,Y,Z)