我可以以某種方式優化此公式嗎?我評估了很多次,它需要太多的時間...如何優化MATLAB中的矩陣乘法?
w
- 1×N個雙
phis
- N×N的雙
x
- NX2雙
總和(W(一([ size(x,1)1]),:)。* phis,2)
我可以以某種方式優化此公式嗎?我評估了很多次,它需要太多的時間...如何優化MATLAB中的矩陣乘法?
w
- 1×N個雙
phis
- N×N的雙
x
- NX2雙
總和(W(一([ size(x,1)1]),:)。* phis,2)
您正在使用每行的標量積phis
與w
。您可以使用線性代數輕鬆完成此操作。
out = phis * w';
這matrix multiplication節省您的來電sum
,ones
和size
,這將使你的代碼速度快了很多。此外,線性代數運算在Matlab中通常非常快,因爲這是程序歷史上優化的。
我不'不要以爲這會正常工作。我應該將w重新映射到phis的大小,然後計算每行的總和。 – Yekver
@Yekver:由於矩陣和矢量之間的[標量乘積](http://en.wikipedia.org/wiki/Scalar_product)完全符合您所說的「重新映射到大小phis並計算它們的總和「。在MATLAB中,一個標量產品就像其他Jonas向您展示的那樣簡單... –
@Jonas:如何爲您的http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html添加一個鏈接到您的回答?問題標題說「矩陣乘法」,並且幫助頁面解釋'*'是矩陣乘法... –
什麼是x?在你的代碼 – carlosdc
中,N,x,w和phis中的哪一個在每次調用中都有所不同? –
Matlab ** IS **針對矩陣乘法進行了優化 - 這就是名稱中「Mat」部分的含義!所以如果你使用下面的Jonas所示的矩陣乘法'*',而不是用'* .','sum'和所有其他東西重新創建它,它應該快得多;-) –