【问题标题】:Julia: Generating Multidimensional Arrays by Broadcasting/Dot Operations on VectorsJulia:通过对向量的广播/点操作生成多维数组
【发布时间】:2018-02-10 06:44:38
【问题描述】:

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

假设我们有一个函数f,它从三个输入值和三个向量XYZ 中返回一个值,这些向量存储输入值:

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

要对存储在三个向量XYZ 中的值的所有可能组合评估f,然后将结果存储在一个三维数组中,我们可以执行以下操作:

[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 循环。

谢谢!

【问题讨论】:

    标签: multidimensional-array julia


    【解决方案1】:

    最简单的就是给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)
    

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2021-03-06
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2019-09-24
      相关资源
      最近更新 更多