从元胞数组中的字符串创建矩阵
Create matrices from strings in a cell-array
我有一个字符串 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 loop" ?
尝试更改
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
而从未真正存储过去的结果,对吗?
我有一个字符串 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 loop" ?
尝试更改
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
而从未真正存储过去的结果,对吗?