Matlab 从单元格数组中的字符串创建矩阵

Matlab 从单元格数组中的字符串创建矩阵,matlab,loops,matrix,cell-array,dimension,Matlab,Loops,Matrix,Cell Array,Dimension,我有一个字符串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

我有一个字符串
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循环”

试试换衣服

fullSeq = 'ABCD';
idx = find(fullSeq == setdiff(fullSeq, input_cell{i} )); % something wrong here
...
为此:

fullSeq = 'ABCD';
letter = setdiff(fullSeq, input_cell{i})
if isempty(letter)
    idx = find(fullSeq == letter);
    M(:,idx) = 0.5
    M(idx,:) = 0.5
end
M(logical(eye(4))) = 0.5

但是,您也意识到,您只是在每次迭代中覆盖
M
,而从来没有真正正确地存储过去的结果?

这与您之前的问题有何不同?
setdiff(fullSeq,input_cell{1})
setdiff(fullSeq,'ABCD')
,它返回一个空矩阵。我确实在我对这个问题的回答(您应该从这里链接到这个问题)中指定,当
setdiff
返回一个空的marix时,您必须考虑这种情况。我告诉过你这会出错。@Dan:谢谢你的评论。如果input_cell={'BCD'、'ACD'、'ABD'},则代码正常。但是,当我试图更改输入单元格={'CBAD','ACD','ABD'}时,它仍然是一个错误。@kgk当然是的,问题是
setdiff(fullSeq,'ABCD')
(请注意,字母的顺序并不重要!)返回一个空矩阵。然后使用
=
将字符串与空矩阵进行比较,这就是为什么会出现错误。因此,在调用
idx=find(fullSeq==letter)
之前,请先调用
letter=setdiff(fullSeq,input_cell{i})
,并确保第二部分位于筛选空案例的
if
语句中……谢谢!它工作得很好。但它似乎可以处理每个字符串的长度等于fullSeq的情况。顺便说一句,我还将每个矩阵的值以每个向量的形式存储在一个新矩阵中,如下所示:向量=重塑(M.),[],1)向量=向量“%从列更改为1行数据(I,:)=向量数据=[];向量=重塑(M.,[],1);向量=向量“%1”将列更改为1行;数据(i,:)=向量