2014-04-26 21 views

回答

4

索引在此語法上不允許案件。最簡單的解決方法是使用getfield

X=magic(5) 

X = 

    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

>> getfield(X^2,{1,3}) 

ans = 

    725 
+1

+1的解決方法。現在我看到它已經出現[這裏](http://stackoverflow.com/questions/3627107/how-can-i-index-a-matlab-array-returned-by-a-function-without-first-assigning-它),但我不知道它 –

4

這不是Matlab的工作原理。您需要分配矩陣乘法另一個矩陣的結果,然後用它:

A = X^2; 
disp(A(1,2)); 

這是假設你真的意味着做矩陣乘法,而不是元素乘元素。在後一種情況下,你可以做

disp(X(1,2)^2) 

如果你有興趣的矩陣相乘的結果,那麼

disp(X(1,:)*X(:,2)) 

將做到這一點,因爲這是元素(1,2)是如何計算的。最後一個解決方案具有非常高效的優點,因爲您只計算所需的元素,而不是計算整個矩陣並丟棄僅用於保留元素的元素。對於更大的矩陣,這將有所作爲。當然,它使得略少可讀的代碼,所以我總是建議寫在你的代碼中的註釋,當你做到這一點 - 你的未來的自己會感謝你...

編輯採取在http://www.mathworks.com/matlabcentral/newsreader/view_thread/235798看看 - 線程廣泛同意我的第一個陳述,雖然它暗示你想要的語法可能是「未來版本的一部分」。但是6年前就說過了,但它仍然不在這裏......它也顯示了一些非常模糊的解決方法;我建議不要這樣做(因爲所有的解決方法都是隱藏你計算矩陣的事實,然後選擇一個元素,因此計算機上的工作負載不會更小)。

+0

我只想(A * A)(1,2),並想知道爲什麼matlab給我一個錯誤代碼? – user3495562

+0

它給出了一個錯誤,因爲「(A * A)」不是一個可以被索引的對象。只是語法的工作方式。但我的第三個選擇應該做你想做的,並且有效地做。 – Floris

相關問題