我在Matlab(从Excel导入)中有一个包含数字和字符串的大型单元格数组。 让我们说字符串部分看起来像这样,只有更多的列和行:
Table{1,1} = 'string A'
Table{2,1} = 'string B'
Table{3,1} = 'string B'
数字部分看起来更大:
Table{1,2} = 5;
Table{2,2} = 10;
Table{3,2} = 15;
我知道使用数组有缺点(对吗?),因此我考虑通过用数字替换字符串将所有内容转换为数字矩阵。 (可能是带有标题的数据集 - 如果你不反对的话?)
我的问题是我有很多不同的字符串条目,我想自动为每个条目分配一个数字,例如1表示'字符串A',2表示'字符串B'等,这样:
Matrix(1,1) = 1
Matrix(2,1) = 2
Matrix(3,1) = 2
等
和简单的数字:
Matrix(1,2) = Table{1,2};
Matrix(2,2) = Table{2,2};
Matrix(3,2) = Table{3,2};
对于字符串,我不能为每个字符串分配单独的代码,因为有很多不同的字符串条目。有没有办法“自动化”它?
我知道这个帮助网站https://ch.mathworks.com/help/matlab/matlab_prog/converting-from-string-to-numeric.html,但没有找到任何其他帮助。 你会怎么做?
答案 0 :(得分:3)
使用isnumeric
(或ischar
)和cellfun
查找单元格数组中数字和字符条目的索引。然后使用unique
(或需要R2015b的findgroups
)的第三个输出参数将数字分配给单元格数组的字符条目。现在只需将数字放入所需的矩阵中,如下所示:
tmp = cellfun(@isnumeric,Table); %Indices of Numbers
Matrix = zeros(size(Table)); %Initialising the matrix
[~, ~, ic] = unique(Table(~tmp)); %Assigning numbers to characters
Matrix(~tmp) = ic; %Putting numbers for characters
%Above two lines can be replaced with Matrix(~tmp) = findgroups(Table(~tmp)); in R2015b
Matrix(tmp) = [Table{tmp}]; %Putting numbers as they are