在Matlab中自动为数组中的每个字符串赋值

时间:2018-02-04 12:39:19

标签: arrays string matlab

我在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,但没有找到任何其他帮助。 你会怎么做?

1 个答案:

答案 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