2011-08-11 40 views
0

我可以以某種方式優化此公式嗎?我評估了很多次,它需要太多的時間...如何優化MATLAB中的矩陣乘法?

w - 1×N個雙

phis - N×N的雙

x - NX2雙

總和(W(一([ size(x,1)1]),:)。* phis,2)

+0

什麼是x?在你的代碼 – carlosdc

+0

中,N,x,w和phis中的哪一個在每次調用中都有所不同? –

+1

Matlab ** IS **針對矩陣乘法進行了優化 - 這就是名稱中「Mat」部分的含義!所以如果你使用下面的Jonas所示的矩陣乘法'*',而不是用'* .','sum'和所有其他東西重新創建它,它應該快得多;-) –

回答

5

您正在使用每行的標量積phisw。您可以使用線性代數輕鬆完成此操作。

out = phis * w'; 

matrix multiplication節省您的來電sumonessize,這將使你的代碼速度快了很多。此外,線性代數運算在Matlab中通常非常快,因爲這是程序歷史上優化的。

+0

我不'不要以爲這會正常工作。我應該將w重新映射到phis的大小,然後計算每行的總和。 – Yekver

+0

@Yekver:由於矩陣和矢量之間的[標量乘積](http://en.wikipedia.org/wiki/Scalar_product)完全符合您所說的「重新映射到大小phis並計算它們的總和「。在MATLAB中,一個標量產品就像其他Jonas向您展示的那樣簡單... –

+0

@Jonas:如何爲您的http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html添加一個鏈接到您的回答?問題標題說「矩陣乘法」,並且幫助頁面解釋'*'是矩陣乘法... –