【发布时间】:2018-02-10 06:44:38
【问题描述】:
我正在尝试使用广播将函数的值存储到一个三维数组中。下面我用一个简单的例子来说明我要做什么。
假设我们有一个函数f,它从三个输入值和三个向量X、Y 和Z 中返回一个值,这些向量存储输入值:
f = (x, y, z)-> x^2+y^2+z^2
X, Y, Z = randn(100), randn(100), randn(100)
要对存储在三个向量X、Y 和Z 中的值的所有可能组合评估f,然后将结果存储在一个三维数组中,我们可以执行以下操作:
[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 循环。
谢谢!
【问题讨论】:
标签: multidimensional-array julia