arrays - 有没有一种优雅的方法来对 Julia 中静态数组向量中的列求和?

标签 arrays julia

我将粒子的速度存储为向量向量。每行都是一个 SVector,其索引为 x、y、z 速度。
SVector 的算术速度非常好,但它们有点……难以操作。我将如何以比以下更优雅的方式将矢量中的所有 x、y、z 平方速度相加

using StaticArrays
n = 5
v = [SVector{3}(rand(), rand(), rand())  for i = 1:n]
x, y, z = 0.0, 0.0, 0.0
for i=1:n
    x += v[i][1]^2
    y += v[i][2]^2
    z += v[i][3]^2
end
sumv = SVector{3}(x, y, z)
如果我只想对我的速度中的 x、y、z 求和而不求平方,那么 Julia 很简单,只是 sum(v)会给我一个汇总列的向量。
我的一种解决方案是
sum([v[i].^2 for i=1:n])
但必须有一个更简单的解决方案,不需要理解?

最佳答案

sum函数可以采用高阶函数,在添加元素之前转换每个元素。

julia> sum(x->x.^2, v)
3-element SArray{Tuple{3},Float64,1,3} with indices SOneTo(3):
 2.104874346619557
 1.2512923674436118
 1.5781536056190726
这给出了与您的理解相同的答案:
julia> sum(x->x.^2, v) == sum([v[i].^2 for i=1:n])
true

关于arrays - 有没有一种优雅的方法来对 Julia 中静态数组向量中的列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65724842/

相关文章:

c - 从 C 中的数组中删除元素

continuous-integration - Github 操作 CI : making PyCall aware of Julia ENV variables

julia - 如何(有效)将向量添加到 Julia 矩阵的每一行?

julia - 如何在 Julia 中绘制条形图?

java - JSONArray 中的 JSONArray

python - 将两个数组按元素相乘,其中一个数组将数组作为元素

java - 对包含数字的字符串数组进行排序

arrays - 如何检查数组中的CGPoints是否具有相同的坐标?

julia - Julia 中的 `&=` 语法是什么意思?

regex - 在 Julia 中将 ismatch() 函数与正则表达式一起使用时出错