我有一個字符串S1='ACD'
。我生成基於所述S1的矩陣如下:從單元陣列中的字符串創建矩陣
fullSeq = 'ABCD';
idx = find(fullSeq == setdiff(fullSeq, 'ACD')); % it is OK
M(:,idx) = 0.5
M(idx,:) = 0.5
M(logical(eye(4))) = 0.5
的輸出是行:
M =
0.5000 0.5000 0.2003 0.3279
0.5000 0.5000 0.5000 0.5000
0.8298 0.5000 0.5000 0.2452
0.7997 0.5000 0.7548 0.5000
現在,我想用一個循環儘管細胞陣列輸入單元,以產生3所述細胞陣列中的3串的矩陣(根據上面的代碼),如下所示:
input_cell= {'ABCD','ACD', 'ABD'}
for i=1:numel(input_cell)
M = 0.5*rand(4) + 0.5;
M(triu(true(4))) = 1 - M(tril(true(4)));
fullSeq = 'ABCD';
idx = find(fullSeq == setdiff(fullSeq, input_cell{i})); % something wrong here
M(:,idx) = 0.5
M(idx,:) = 0.5
M(logical(eye(4))) = 0.5
end
錯誤是:
Error using == Matrix dimensions must agree.
Error in datagenerator (line 22)
idx = find(fullSeq == setdiff(fullSeq, input_cell{i}));
如何解決此問題以生成3個矩陣?或者使用其他解決方案而不是使用「for循環」?
與上一個問題有何不同? –
'setdiff(fullSeq,input_cell {1})'是'setdiff(fullSeq,'ABCD')',它返回一個空矩陣。我確實在我的[以前的答案](http://stackoverflow.com/questions/33011701/create-matrices-from-a-given-cell-array-of-strings-with-different-lengths)指定到這個問題(你應該從這裏鏈接到),那麼當'setdiff'返回一個空的marix時你必須考慮這個情況。我告訴過你那裏會出錯。 – Dan
@丹:感謝您的評論。如果input_cell = {'BCD','ACD','ABD'},則代碼正常。但是,當我嘗試更改input_cell = {'CBAD','ACD','ABD'}時,它仍然是一個錯誤。 – kgk