ismember для NaN и значения, не работающие с массивом разных размеров - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь сравнить 2 массива разных размеров и получить столбец совпадающих пар.

Если я сделаю:

ismembernan = @(a,b) ismember(a,b) | (isnan(a) & any(isnan(b)));
a = [NaN 11 12 13 14 15; NaN 0 1 2 3 4; NaN 5 6 7 8 9];
b = [NaN 0 1 2 3 4; NaN 5 6 7 8 9]];
k = ismembernan(a,b);
col = all(k,2);
column = find(col)

В MATLAB 2016b я получу ожидаемый ответ

column = 2 3

, но в MATLAB 2014a (я должен работать с этой версией) я получаю следующую ошибку:

Ошибкаиспользуя &

Входы должны иметь одинаковый размер.

Ошибка в @ (a, b) ismember (a, b) | (isnan (a) & any (isnan (b)))

возможно, решение - это вложенный цикл for с оператором if, но я ищу лучшее решение.

Как мне заставить ismember работать с nan значения в R2014a?

1 Ответ

0 голосов
/ 13 июня 2018

Неявное расширение введено в R2016b.В старых версиях используйте bsxfun т.е.

ismembernan = @(a,b) ismember(a,b) | bsxfun(@and,isnan(a), any(isnan(b)));
...