Arrays 转换'的单元格;正确';和';假';值转换为1和0的数字数组

Arrays 转换'的单元格;正确';和';假';值转换为1和0的数字数组,arrays,matlab,boolean,vectorization,cell,Arrays,Matlab,Boolean,Vectorization,Cell,我有一个6432 x 1单元格,其中包含“True”或“False”值。 我正在尝试将单元格转换为一个数值数组,值为0表示False,值为1表示True。 我肯定错过了一个显而易见的解决办法,但我觉得我已经尝试了一切。 谢谢。好的,我找到了一种有效的方法,但似乎效率低下? 如果有人知道更好的解决方案,我们将不胜感激 t = find(strcmp(tad, 'True')); tad(t,:) = {1}; f = find(strcmp(tad, 'False')); tad(f,:) = {

我有一个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
t=sum(字符数,2)<485
解释
char
从字符串的单元格数组中生成一个char数组

sum
创建校验和


如果校验和小于500(确切地说,实际上是481),则它必须是
“true”
'false'
的校验和为523。因此,由于大写字母变体
'True'
导致448,而
'False'
导致491,因此485附近的值将是一个合适的阈值。

您也可以使用一行的
t=double(strcmp(s,'True')
您几乎总是可以省略
查找
。作为
find
输入的逻辑数组也可以用于索引。这非常聪明!好的,我做了一个小改动:t=sum(char(s),2)<480。我不知道为什么我的校验和你的不同,但在我这方面,491代表False,448代表True。谢谢大家!@胸腺空间既然你这么说了,大写字母有不同的值,正如你有
True
False
一样,你的校验和是不同的。出于这个原因,您认为481和491之间的阈值是一个不错的选择,因为您涵盖了这两种情况。使用480,您将错过
true