String 字符串到矩阵的单元格数组
String 字符串到矩阵的单元格数组,string,matlab,matrix,cell-array,String,Matlab,Matrix,Cell Array,A是一个单元格数组,我想从A创建一个矩阵,如果单元格是A,矩阵显示1,如果是b,矩阵中显示为2,对于c,矩阵显示为3 谢谢。很简单: A = {'a','b','c','b','a',...} 对于字母与数字1、2、3的一般关联…: result = cell2mat(A)-'a'+1 letters2numbers = 'abc'; %// 'a'->1, 'b'->2 etc. [~, result] = ismember(cell2mat(A), letters2numb
A
是一个
单元格数组,我想从A
创建一个矩阵,如果单元格是A
,矩阵显示1,如果是b
,矩阵中显示为2,对于c
,矩阵显示为3
谢谢。很简单:
A = {'a','b','c','b','a',...}
对于字母与数字1、2、3的一般关联…:
result = cell2mat(A)-'a'+1
letters2numbers = 'abc'; %// 'a'->1, 'b'->2 etc.
[~, result] = ismember(cell2mat(A), letters2numbers)
对于字符串与数字1,2,3的一般关联…:
result = cell2mat(A)-'a'+1
letters2numbers = 'abc'; %// 'a'->1, 'b'->2 etc.
[~, result] = ismember(cell2mat(A), letters2numbers)
在这个例子中
strings2numbers = {'hi', 'hello', 'hey', 'good morning', 'howdy'};
A = {'hello', 'hi', 'hello', 'howdy', 'bye'};
[~, result] = ismember(A, strings2numbers)
具体案例 对于问题中列出的简单特定情况,可以使用将所有单元格元素转换为字符,然后从中减去
96
,这是与'a'-1
-
result =
2 1 2 5 0
样本运行-
A_numeric = char(A)-96
一般情况 对于一般的替换情况,您需要像这样做更多的工作-
>> A
A =
'a' 'b' 'c' 'b' 'a'
>> A_numeric = char(A)-96
A_numeric =
1
2
3
2
1
样本输入输出-
%// Inputs
A = {'correct','boss','cat','boss','correct','cat'}
newcellval = {'correct','cat','boss'}
newnumval = [8,2,5]
[unqcell,~,idx] = unique(A,'stable')
[~,newcell_idx,unqcell_idx] = intersect(newcellval,unqcell,'stable')
A_numeric = newnumval(changem(idx,newcell_idx,unqcell_idx))
使用一个For循环,该循环迭代一个字符并将字符转换为数字
>> A,newcellval,newnumval
A =
'correct' 'boss' 'cat' 'boss' 'correct' 'cat'
newcellval =
'correct' 'cat' 'boss'
newnumval =
8 2 5
>> A_numeric
A_numeric =
8 5 2 5 8 2
我希望它能工作。工作得很好,但是如果单元格中包含一个“单词”,如“correct”,该怎么办?@chinkare_16认为您可以使用
unique
在这种情况下-[~,~,out]=unique(a,'stable')
。但是,然后映射到什么,您需要确定。for
循环不是必需的。这可以通过矢量化来实现。见Divakar的答案。