我有一个单元格数组{'W','L','D','D','W'}
。我想将其转换为{-1,0,1}数组,其中' W'映射到1,' D'到0,' L'到-1。
如果没有编写循环,有没有快速的方法呢?
答案 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