【问题标题】:Julia matrix operationJulia 矩阵运算
【发布时间】:2020-06-09 20:45:28
【问题描述】:

我正在寻找矩阵运算。但不确定是否有针对它的现有操作。

例如:P=[1 2 ; 3 4] 和 Q=[5 6 ; 7 8]

[P ; Q] @ [P ; Q] => [P*P ; P*Q ; Q*P ; Q*Q]

@ 是我正在寻找的操作。 谢谢!

【问题讨论】:

  • 确认一下,这是外层产品吧?如果是这样,a*b' 就是您要查找的内容。
  • 您确定要将[P*P ; P*Q ; Q*P ; Q*Q] 作为输出而不是[P*P P*Q; Q*P Q*Q],或者更可能是[P*P' P*Q' ; Q*P' Q*Q']
  • @Mason 是的,[PP; PQ ; QP ; QQ] 是我正在寻找的输出。但我想它没有任何操作,不太确定。 :(

标签: matrix julia operation


【解决方案1】:

您可以只定义您的自定义运算符,例如:

function ⊗(a::Matrix,b::Matrix)
    h1 = Int(size(a,1)/2)
    P1 = @view a[1:h1,:]
    Q1 = @view a[h1+1:end,:]
    h2 = Int(size(b,1)/2)
    P2 = @view b[1:h2,:]
    Q2 = @view b[h2+1:end,:]
    [P1*P2 ; P1*Q2 ; Q1*P2 ; Q1*Q2]
end

现在使用它!

julia> [P ; Q] ⊗ [P ; Q] == [P*P ; P*Q ; Q*P ; Q*Q]
true

也许您需要添加检查尺寸等。 您可能还需要额外的运算符函数 ⊗(a::Tuple{Matrix,Matrix},b::Tuple{Matrix,Matrix}) 所以您不需要合并 PQ 矩阵,然后再合并分解它们。

【讨论】:

  • Int(n/2) 会出错,除非n 是偶数(而且它也更慢)。请改用整数除法,div(n, 2)n ÷ 2(或 n >> 1)。很少需要进行这样的转换,在进行圆形/地板等时也是如此。写round(Int, x)而不是Int(round(x))等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2013-08-13
  • 1970-01-01
相关资源
最近更新 更多