将'True'和'False'值的单元格转换为1和0的数字数组

问题描述 投票:2回答:4

i具有一个6432 x 1的单元格,其中包含'True'或'False'的值。我正在尝试将单元格转换为数值数组,其中False的值为0,True的值为1。我肯定错过了一个显而易见的解决方案,但我觉得我已经尝试了所有方法。谢谢。

arrays matlab boolean vectorization cell
4个回答
1
投票

如果您的单元格称为s,则可以执行此操作:

t = zeros(size(s));
t(strcmp(s,'True')) = 1;

0
投票

好吧,我找到了一种可行的方法,但似乎效率低下?如果有人知道更好的解决方案,将不胜感激。

t = find(strcmp(tad, 'True'));
tad(t,:) = {1};
f = find(strcmp(tad, 'False'));
tad(f,:) = {0}

0
投票

您也可以使用cellfun并仅比较第一个字符以获得更好的性能(但是,使用cellfun可能会比较慢)。

t = double(cellfun(@(x) x(1) == 'T',s));

这是另一种有趣的方法:

t = 5 - cellfun(@length,s);

t = 5 - cellfun('length',s);


0
投票

开箱即用的解决方案,比调用strcmp数千次要快:

t = sum(char(s),2) < 500

说明

[char(s)从字符串的单元格数组中形成一个char数组。

[sum创建校验和。

如果校验和小于500(实际上为481,则必须为'true')。 'false'的校验和为523。

© www.soinside.com 2019 - 2024. All rights reserved.