簡體   English   中英

3D矢量矩陣乘法

[英]3D Matrix multiplication with vector

這讓我感到困擾:

假設你有一個有三層的矩陣。

是否有一種簡單的方法將此矩陣與三個元素的向量相乘,以便第一層(所有元素)與向量的第一個元素相乘,依此類推......

現在我必須使用一個函數來這樣做:

function out=fun(matrix,vector)

out=matrix;
for k=1:3
    out(:,:,k)=out(:,:,k)*vector(k);
end

是否有一種有效的方法可以在一行中完成此操作而無需功能?

一個非常簡潔的解決方案是將vector 重塑為1×1×3矩陣,並使用函數BSXFUN執行元素乘法(它將根據需要復制維度以匹配兩個輸入參數的大小):

newMatrix = bsxfun(@times,matrix,reshape(vector,[1 1 3]));

有一個名為repmat的matlab函數可以幫助你。

M = [1 2 3]
M * repmat([1 2 3], 3,1)
ans =

 6    12    18
 6    12    18
 6    12    18

M = [1 2 3]
M .* repmat([1 2 3], 3,1)
ans =

 1     4     9
 1     4     9
 1     4     9

取決於您希望如何組織矩陣。

另一種方法是重復向量以按大小匹配矩陣:

out = out.*shiftdim(repmat(vector(:),[1 size(out(:,:,1))]),1)

除了gnovice的答案之外 ,您還可以沿着其他維度復制矢量並進行直接的元素乘法運算。

A=randn(1000,1000,3);%# this is your matrix
vector=[1,2,3];%# this is your vector

[dim1 dim2 ~]=size(A);
replicatedVector=repmat(reshape(vector,1,1,3),[dim1,dim2,1]);
out=A.*replicatedVector;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM