我在将字符变量转换为Matlab中的数字时遇到问题。 char变量中的每个单元格包含两个可能的单词之一。我需要将word_one(例如)转换为代表' 1'和word_two来代表' 2'。
是否有命令让我这样做?
到目前为止,我已尝试过:
%First I converted 'Word' from cell to char
Word = char(Word);
Word(Word == 'Word_one') = '1';
Word(Word == 'Word_two') = '2';
然而,我得到了:
Error using ==
Matrix dimensions must agree.
当我尝试仅包含第一个字母时(即' W'),它只会更改完整单词中的第一个字母(即1ord_one)。
有一种简单的方法吗?
感谢您的帮助 - 非常感谢任何建议!
答案 0 :(得分:1)
使用ismember
:
possibleWords = {'Word_one', 'Word_two'}; %// template: words corresponding to 1, 2, ...
words = {'Word_two', 'Word_one', 'Word_two'}; %// data: words you need to convert
[~, result] = ismember(words, possibleWords);
在此示例中,
result =
2 1 2
如果您需要更多灵活性,可以指定与每个单词对应的值:
possibleWords = {'Word_one', 'Word_two'}; %// template: words corresponding to 1, 2, ...
correspondingValues = [1.1, 2.2]; %// template: value corresponding to each word
words = {'Word_two', 'Word_one', 'Word_two'}; %// data: words you need to convert
[~, ind] = ismember(words, possibleWords);
result = correspondingValues(ind);
给出了
result =
2.2000 1.1000 2.2000
答案 1 :(得分:0)
看起来这里有几个潜在的问题。
使用strcmp()
(字符串比较)代替当前的等效语句。使用==
比较字符串逐个元素地比较并返回逻辑向量(这里您需要一个逻辑值)。字符串比较strcmp()
将比较整个字符串并返回单个值。
您也可能没有必要转换您的单元格数组。您可以维护单元阵列结构并单独寻址每个单元。
尝试以下代码段的内容。
for i = 1:length(Word)
if strcmp(Word{i},'Word_one')
Word{i} = '1';
elseif strcmp(Word{i},'Word_two')
Word{i} = '2';
end
end
答案 2 :(得分:0)
有很多方法可以解决这个问题。这是我的方法。
% define your words
words = {'word_one','word_two','word_two','word_one','word_one'};
% define a function to get the indexes of the words of interest
getindex = @(c, y) cellfun(@(x) strcmp(x,y), c);
% replace 'word_one' with '1'
words(getindex(words, 'word_one'))={'1'};
% replace 'word_two' with '2'
words(getindex(words, 'word_two'))={'2'};
words =
'1' '2' '2' '1' '1'
答案 3 :(得分:0)
您可以使用简短的unique
-
input_cellarr = {'Word_two','Word_one','Word_two','Word_two','Word_one','Word_one'}
[~,~,out] = unique(input_cellarr)
示例运行 -
input_cellarr =
'Word_two' 'Word_one' 'Word_two' 'Word_two' 'Word_one' 'Word_one'
out =
2
1
2
2
1
1
说明: unique
在这里工作,因为它会生成带有数字数组的 ascending order
排序数组。现在,当在单元格数组上使用时, ascending order
会转换为 alphabetical order
排序。因此,unique(input_cellarr)
始终为{'Word_one' , 'Word_two'}
,因为one
按字母顺序高于two
。因此,out
索引始终将1
的第一个唯一ID设为'Word_one'
,将2
的第二个ID设为'Word_two'
。