Преобразовать ячейку значений 'True' и 'False' в массив цифр c из 1 и 0 - PullRequest
2 голосов
/ 30 марта 2020

У меня есть ячейка 6432 x 1, содержащая значения «True» или «False». Я пытаюсь преобразовать ячейку в массив цифр c со значением 0 для False и 1 для True. Должно быть, мне не хватает очевидного решения, но я чувствую, что перепробовал все. Спасибо.

Ответы [ 4 ]

4 голосов
/ 30 марта 2020

Немного нестандартного решения, которое должно быть быстрее, чем сравнивать одни и те же строки тысячи раз:

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

Пояснение

char(s) делает массив символов из массив ячеек строк.

sum создает контрольную сумму.

Если контрольная сумма меньше 500 (точнее, на самом деле 481), она должна быть 'true'. Контрольная сумма 'false' равна 523. В связи с этим, поскольку вариант заглавной буквы 'True' приводит к 448 и 'False' к 491, что-то около 485 будет подходящим пороговым значением.

1 голос
/ 30 марта 2020

Если ваша ячейка называется s, вы можете сделать это:

t = zeros(size(s));
t(strcmp(s,'True')) = 1;
0 голосов
/ 30 марта 2020

Вы также можете использовать cellfun и сравнивать только первый символ для лучшей производительности (однако, это может быть медленнее при использовании cellfun).

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

Это еще один метод только для веселье:

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

или

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

0 голосов
/ 30 марта 2020

Хорошо, я нашел способ, который работает, но кажется неэффективным? Если кто-нибудь знает лучшее решение, это будет высоко ценится.

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