如何在Matlab中将char转换为数字

时间:2015-04-20 16:13:30

标签: matlab

我在将字符变量转换为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)。

有一种简单的方法吗?

感谢您的帮助 - 非常感谢任何建议!

4 个答案:

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