gpt4 book ai didi

multidimensional-array - Julia 在所需尺寸上点积的方法是什么

转载 作者:行者123 更新时间:2023-12-04 08:42:21 24 4
gpt4 key购买 nike

我有一个带有两个向量场 uv 的 xy 网格。我将向量场表示为 Array{Float64, 3},尺寸为 nx × ny × 2。我想将点积 u.v 作为标量字段(Array{Float64,2} 尺寸为 nx×ny)。实现这一目标的最佳方法是什么?

最好有类似 dot(u,v,3) 的东西,其中 3 是点积的维度。

nx, ny = 3, 4

u = Array{Float64,3}(rand(0:1, nx, ny, 2))
#[0.0 1.0 0.0 1.0; 1.0 0.0 1.0 0.0; 1.0 0.0 1.0 0.0]
#[1.0 0.0 1.0 0.0; 1.0 0.0 0.0 1.0; 1.0 0.0 1.0 1.0]

v = Array{Float64,3}(rand(0:1, nx, ny, 2))
#[1.0 1.0 1.0 1.0; 0.0 1.0 0.0 0.0; 0.0 1.0 1.0 0.0]
#[1.0 0.0 0.0 0.0; 0.0 1.0 0.0 0.0; 1.0 1.0 1.0 0.0]

[dot(u[i,j,:], v[i,j,:]) for i in 1:nx, j in 1:ny]

3×4 Array{Float64,2}:
1.0 1.0 0.0 1.0
0.0 0.0 0.0 0.0
1.0 0.0 2.0 0.0

最佳答案

sum(u.*v,3) 既(合理地)又快又短。

要明确地得到一个矩阵,你可以像这样挤压第三维 squeeze(sum(u.*v,3), 3)

更新:当然,这有分配,如果速度就是一切,这不是最佳答案。在这种情况下,请参阅@DNF 的直接循环实现,它基本上是尽可能快的。

关于multidimensional-array - Julia 在所需尺寸上点积的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com