Matrix Julia矩阵运算

Matrix Julia矩阵运算,matrix,julia,operation,Matrix,Julia,Operation,我在找一个矩阵运算。但不确定是否存在针对它的现有操作 例:p=[12;34]和Q=[56;78] [P ; Q] @ [P ; Q] => [P*P ; P*Q ; Q*P ; Q*Q] @就是我要找的手术。 谢谢 您可以定义自定义运算符,例如: function ⊗(a::Matrix,b::Matrix) h1 = Int(size(a,1)/2) P1 = @view a[1:h1,:] Q1 = @view a[h1+1:end,:] h2 = I

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

例:p=[12;34]和Q=[56;78]

[P ; Q] @ [P ; Q] => [P*P ; P*Q ; Q*P ; Q*Q]
@就是我要找的手术。
谢谢

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

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})所以你不需要合并
P
Q
矩阵,然后再分解它们。

只是确认一下,这是外积,对吗?如果是这样的话,
a*b'
就是你想要的。你确定你想要
[P*P;P*Q;Q*P;Q*Q]
作为输出而不是
[P*P*Q;Q*PQ*Q]
,或者更可能的是,
[P*P'P*Q';Q*P'Q']
?@Mason是的,[PP;PQ;QP;QQ]是我想要的输出。但我想没有手术,不太确定(
Int(n/2)
将出错,除非
n
是偶数(而且速度也较慢)。使用整数除法、
div(n,2)
n÷2
(或
n>>1
)代替。在进行圆形/地板等操作时,很少需要进行这样的转换。编写
round(Int,x)
,而不是
Int(round(x))
等。