在 julia 中使用 3 向量和 n 向量广播向量乘法

Moo*_*ose 4 vector linear-algebra julia

我有一个 3 向量c = [0.7, 0.5, 0.2],我想将它与 n 向量中的所有内容相乘,x = rand((-1,1),n)这样我得到一个结果 n+2 向量 y,其中y[i] == x[i]*c[3] + x[i-1]*c[2] + x[i-2]*c[1]

我应该如何在朱莉娅中做到这一点?我觉得应该有一种方法可以将较小的 3 向量广播到 n 向量中的所有值。对于边缘情况,如果 i-1 或 i-2 超出范围,我只希望这些组件为零。

Bog*_*ski 5

如果我正确理解你的问题,你想要一个卷积,在标准卷积中扭曲向量 c会被反转。为此,您可以使用例如 DSP.jl。

这是你想要的吗?

julia> using DSP

julia> c = [0.7, 0.5, 0.2]
3-element Array{Float64,1}:
 0.7
 0.5
 0.2

julia> conv([10, 100, 1000, 10000], reverse(c))
6-element Array{Float64,1}:
    1.9999999999996967
   25.0
  257.0000000000003
 2569.9999999999995
 5700.0
 6999.999999999998
Run Code Online (Sandbox Code Playgroud)

您也可以像这样dotLinearAlgebra模块手动实现它:

julia> using LinearAlgebra

julia> x = [10, 100, 1000, 10000]
4-element Array{Int64,1}:
    10
   100
  1000
 10000

julia> y = [0;0;x;0;0]
8-element Array{Int64,1}:
     0
     0
    10
   100
  1000
 10000
     0
     0

julia> [dot(@view(y[i:i+2]), c) for i in 1:length(x)+2]
6-element Array{Float64,1}:
    2.0
   25.0
  257.0
 2570.0
 5700.0
 7000.0
Run Code Online (Sandbox Code Playgroud)