将 '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将是一个合适的阈值。
我有一个 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将是一个合适的阈值。