假設我有2個變量F(i,j)
它依賴於一個矩陣的行索引和列索引的函數,我想用這些值來填充矩陣M_ij = F(i,j)
MATLAB創建矩陣M = F(I,J)
當然可以通過i
和j
或甚至只有i
或j
進行循環,如果函數F
可以是矢量化的,但我想知道這樣做的簡便方法。
假設我有2個變量F(i,j)
它依賴於一個矩陣的行索引和列索引的函數,我想用這些值來填充矩陣M_ij = F(i,j)
MATLAB創建矩陣M = F(I,J)
當然可以通過i
和j
或甚至只有i
或j
進行循環,如果函數F
可以是矢量化的,但我想知道這樣做的簡便方法。
這是不可能的回答沒有看到你的F
但是讓我們假設F
被矢量如
F = @(x,y)x+y;
那麼你可以使用ndgrid
:
[I,J] = ndgrid(1:m,1:n);
M = F(I,J)
在上述情況下,這可能會很好也適用於你的情況,你也許可以直接使用像bsxfun
這樣的東西來矢量化函數:
M = bsxfun(@plus, 0:m-1, 1:n);
無論您的功能F
是否爲矢量化的,您必須對每個值i
和j
進行評估。如果F
未被矢量化,則必須手動對索引執行循環。如果F
基於MATLAB內建的像sin
,log
等,它很可能是矢量化的。在這種情況下,可以在i
和j
傳遞是大小爲M
相同,並且在一個步驟得到的結果:
[j, i] = meshgrid(1:size(M, 2), 1:size(M, 3))
M = F(i, j)
注意meshgrid
取並返回參數X, Y
,這是矩陣的逆索引順序row, col
。
我不明白你在問什麼。你的功能是什麼?什麼是輸入?你有什麼嘗試? SO不是代碼寫入服務。 – excaza
提供一個F的例子。如果它需要向量輸入,可以傳入與M相同大小的i和j,其中i的每一行相同,j的每一列相同。 –
答案完全取決於函數'F'。你需要告訴它是什麼 –