回答
我想這是你想要什麼:
mat1=randi(10,[4 5]);
vec1=randi(10,[1 5]);
result=mat1.*repmat(vec1,[size(mat1,1),1]);
rempat
將複製vec1
沿mat1
行。然後,我們可以執行元素方式乘法(.*)
以「將M × N
矩陣的每一列乘以大小爲N
的向量的對應元素」。
編輯:只是添加到計算方面。有一個替代repmat
,我希望你知道。矩陣索引可以實現與repmat
相同的行爲並且速度更快。我從here採用了這種技術。
觀察到
repmat(vec1,[size(mat1,1),1]);
爲
vec1([1:size(vec1,1)]'*ones(1,size(mat1,1)),:);
如果你看仔細,表達歸結爲vec1([1]'*[1 1 1 1]),:);
,你可以寫下面的語句是再次:
vec1([1 1 1 1]),:);
從而達到與repmat
相同的行爲並且速度更快。我跑三種溶液100000
倍,即,
- 解決方案使用
repmat
:0.824518秒 - 溶液中使用索引技術上面解釋:0.734435秒使用
bsxfun
- 解由@LuisMendo提供:0.683331秒
你可以觀察到bsxfun
稍快。
儘管您可以使用repmat
(如@Parag's answer),但通常使用more efficient來使用bsxfun
。它還具有代碼(最後一行)對於行和列向量相同的優點。
%// Example data
M = 4;
N = 5;
matrix = rand(M,N);
vector = rand(1,N); %// or size M,1
%// Computation
result = bsxfun(@times, matrix, vector); %// bsxfun does an "implicit" repmat
如果bsxfun執行「隱式」repmat,那麼效率是多少? – Mehraban
@SAM見[這裏](http://blogs.mathworks.com/loren/2008/08/04/comparing-repmat-and-bsxfun-performance/)。我的猜測是'bsxfun'「知道」元素是相同的,所以它在內部不會像'repmat'那樣複製它們 –
- 1. matlab矩陣元素單元乘法的替代方法
- 2. BLAS中元素明智的矢量矢量乘法?
- 3. 將矩陣列與矢量元素相乘的最快方法R
- 4. 轉換matlab中的矢量元素
- 5. 矢量元素的乘積之和
- 6. MATLAB:複製矢量的每個元素?
- 7. Matlab:從矢量中刪除元素
- 8. 添加矢量的元素的列表的元素中的R
- 9. Haskell中的列表元素相乘
- 10. 列表中的元素彼此相乘
- 11. Matlab基於元素的矩陣乘法
- 12. 2D矢量(笛卡爾乘積)中元素的所有排列
- 13. 如何將給定矩陣的每一行中的所有元素與給定矢量的相應元素相乘並將它們在MATLAB中相加?
- 14. matlab洗牌元素的矢量具有相同的序列相同的數字
- 15. 單元陣列中所有元素的長度矢量?
- 16. 乘以列表中的單個元素
- 17. 如何過濾相對於其他元素的矢量元素?
- 18. 矢量與陣列的大量元素?
- 19. 如何將所有其他元素的列表元素相乘?
- 20. 兩個列表的元素相乘
- 21. 列表中的乘法元素
- 22. 列表中的乘法元素
- 23. Matlab,向量中的元素
- 24. Summatory矢量元素
- 25. Matlab:元素3D矩陣乘法
- 26. MATLAB中一個單元中的相似和不相似元素
- 27. 簡單的方法來從列表中刪除元素在Python
- 28. Matlab對單元格上的相同索引元素的均值
- 29. 矢量元素的產品
- 30. 比較元素的矢量
+1它可以更好地使用'bsxfun'(見我的回答) –
@LuisMendo是,'bsxfun'是最快的方法。 –