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

Convert cell of 'True' and 'False' values to a numeric array of 1s and 0s

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

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

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

如果您的手机名为 s,您可以这样做:

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

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

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

这是另一种方法,只是为了好玩:

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

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

一个开箱即用的小解决方案,应该比比较相同的字符串数千次更快:

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

说明

char(s) 从字符串元胞数组中创建一个字符数组。

sum 创建校验和。

如果校验和小于500(准确地说是481),则一定是'true''false' 的校验和是 523。就此而言,由于大写字母变体 'True' 导致 448,'False' 导致 491,所以大约 485将是一个合适的阈值。