我正在尝试使用广播将函数的值存储到三维数组中。下面我用一个简单的例子来说明我想要做的事情。
我们假设我们有一个函数f
,它返回三个输入值和三个向量X
,Y
和Z
的值,用于存储输入值:
f = (x, y, z)-> x^2+y^2+z^2
X, Y, Z = randn(100), randn(100), randn(100)
评估存储在三个向量f
,X
和Y
中的值的所有可能组合的Z
,然后将结果存储为三维数组,我们可以这样做:
[f(x,y,z) for x in X, y in Y, z in Z]
但是,我想避免使用for循环并使用点运算符或广播。所以,我写了以下内容:
broadcast(z->f.(X, Y', z), Z)
然而,它的问题是结果变成了二维数组的一维数组。
是否有一种有效的方法来评估f
存储在向量X
,Y
和Z
中的值的所有可能组合,并将结果放在三维中不使用for循环的数组?
我不想使用for循环,因为我考虑将来将代码放在GPU上,似乎GPU计算不适用于for循环。
谢谢!
答案 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)