如何在matlab中将字符串数组转换为数字?

时间:2016-04-21 11:04:01

标签: matlab

我有一个单元格数组{'W','L','D','D','W'}。我想将其转换为{-1,0,1}数组,其中' W'映射到1,' D'到0,' L'到-1。

如果没有编写循环,有没有快速的方法呢?

3 个答案:

答案 0 :(得分:6)

您可以使用categorical数组在单个表达式中执行此操作

double(categorical({'W','L','D','D','W'}, {'L', 'D', 'W'})) - 2

或者对于R2013b之前的MATLAB,您可以执行两个表达式:

[~, loc] = ismember({'W','L','D','D','W'}, {'L', 'D', 'W'});
result = loc - 2;

答案 1 :(得分:4)

使用strcmp

A = {'W','L','D','D','W'};
B = strcmp (A,'W');
C = strcmp (A,'L') * -1;
B+C

ans =

 1    -1     0     0     1

答案 2 :(得分:0)

@ GameOfThrows的答案很好,但如果你的字符数映射变得更复杂,它就不会很好地概括。这是我的解决方案:

创建一个以您希望的方式映射字符的函数

function n = mapChar(c)
    if strcmp(c, 'W')
        n = 1;
    elseif strcmp(c, 'D')
        n = 0;
    elseif strcmp(c, 'L')
        n = -1;
    end
end

然后使用cellfun将其应用于单元格数组:

>> cellfun(@mapChar, {'W','L','D','D','W'})

ans =

     1    -1     0     0     1

如果您发现需要使用其他映射,则只需重新定义映射。

此外,所有内容都可以内联(使用@ GameOfThrows方法的一部分):

>> cellfun(@(c)(strcmp(c, 'W') - strcmp(c, 'L')), {'W','L','D','D','W'})

ans =

     1    -1     0     0     1