設定矩陣內的子矩陣值我有一個缺失值矩陣,我想將該矩陣的左上部分設定為另一個矩陣中的值。
initial_matrix=J(3,3,.);
update_matrix=[1 2, 3 4];
期望的結果是
[
1 2 .,
3 4 .,
. . .
]
我知道我可以像這樣迭代矩陣的索引
for(i=1, i<=N rows(update_matrix), i++,
for(k=1, k<=N cols(update_matrix), k++,
initial_matrix[i,k]=update_matrix[i,k]
)
);
Show(initial_matrix)
但是,有沒有一種更簡單、更緊湊的方法來使用直接引用矩陣索引來實現這一點?
自動化和腳本回覆:設定矩陣內的子矩陣值你好@MathStatChem ,
這可能不如您所希望的那麼優雅,但它應該可以做到:
initial_matrix = J(3,3,.);
update_matrix=[1 2, 3 4];
initial_matrix[1,1::2]=update_matrix[1,1::2];
initial_matrix[2,1::2]=update_matrix[2,1::2];
輸出結果如下:
[1 2 .,
3 4 .,
. . .]
我相信這可能就是你想要的。索引是 [row,n1::n2],所以 [1,1::2] 是第 1 行元素 1 到 2。唯一的缺點是你必須事先知道要將值賦給哪個子矩陣。如果你不知道這些訊息,循環會是更好的方法。
希望有幫助! ,
DS
回覆:設定矩陣內的子矩陣值這應該對你有用。如果更新矩陣不包含行和列,Try() 將不會指派任何內容。
Names Default To Here( 1 );
im = J( 3, 3, . );
um = [1 2, 3 4];
im = Transform Each( {e, {r, c}}, im, Try( um[r, c] ) );
//// [1 2 .,
//// 3 4 .,
//// . . .]
回覆:設定矩陣內的子矩陣值m = j(7,8,99);
m[2::5,3::4] = [
41 42,
43 44,
45 46,
47 48
];
show(m)
m =
[ 99 99 99 99 99 99 99 99,
99 99 41 42 99 99 99 99,
99 99 43 44 99 99 99 99,
99 99 45 46 99 99 99 99,
99 99 47 48 99 99 99 99,
99 99 99 99 99 99 99 99,
99 99 99 99 99 99 99 99];
回覆:設定矩陣內的子矩陣值謝謝@Craige_Hales ,這正是我想要的。為了更通用,我做了以下事情
m=J(7,8,99);
update=[41 42,
43 44,
45 46,
47 48
];
m[1::nrows(update), 1::ncols(update)]=update;
show(m);
結果
m =
[ 41 42 99 99 99 99 99 99,
43 44 99 99 99 99 99 99,
45 46 99 99 99 99 99 99,
47 48 99 99 99 99 99 99,
99 99 99 99 99 99 99 99,
99 99 99 99 99 99 99 99,
99 99 99 99 99 99 99 99];
回覆:設定矩陣內的子矩陣值謝謝。我從來沒用過Transform Each(),它看起來挺有用的,而且我還沒想過在矩陣上用它。
回覆:設定矩陣內的子矩陣值我的程式碼應該稍微修改一下。依照它的寫法,任何不在更新矩陣中的行/列組合都會用缺失值取代初始矩陣中的值。 Try() 應該有一個 Catch 表達式,以防止在原始值沒有缺失的情況下覆寫該值。
Names Default To Here( 1 );
im = J( 3, 3, 5 );
um = [1 2, 3 4];
im = Transform Each( {e, {r, c}}, im, Try( um[r, c], e ) );