использовать логический массив, чтобы получить позицию комбинации строк из массива ячеек в Matlab - PullRequest
0 голосов
/ 07 февраля 2019

Есть ли лучший способ получить position из two strings от cell array?Чтобы проиллюстрировать мою точку зрения, найдите ниже пример:

fruittbl{1,1} = 'banana'
fruittbl{2,1} = 'mango'
fruittbl{3,1} = 'banana'
fruittbl{4,1} = 'peach'
fruittbl{5,1} = 'banana'

fruittbl{1,2} = 'green'
fruittbl{2,2} = 'red'
fruittbl{3,2} = 'yellow'
fruittbl{4,2} = 'green'
fruittbl{5,2} = 'red'

f= 'banana'; c = 'yellow'

idx_f = cellfun(@(x) isequal(x, f),fruittbl(:,1))
idx_c = cellfun(@(x) isequal(x, c),fruittbl(:,2))
lookup_idx = [idx_f idx_c]  % logical array

lookup_idx =

 1     0
 0     0
 1     1
 0     0
 1     0

Здесь я заинтересован в получении values из indices, где lookup_idx = [1,1].Это равносильно поиску позиции banana && yellow в fruittbl: (3,3).

К сожалению, попытка использовать lookup_idx = [find(lookup_idx(:,1)>0) & find(lookup_idx(:,2)>0)] неверна.

Спасибозаранее

Бест,

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете использовать ismember и categorical ...

idx = ismember( categorical( fruittbl ), {'banana','yellow'}, 'rows' )

Вывод:

>> idx
  0
  0
  1
  0
  0

Таким образом, строка 3 (find(idx)) - это строка в fruittbl равно {'banana','yellow'}.Вы должны использовать categorical, потому что ismember не определен для массивов ячеек и атрибута rows.

0 голосов
/ 07 февраля 2019

Я думаю, это то, что вы ищете:

>> result = ismember(fruittbl(:,1),'banana') & ismember(fruittbl(:,2),'yellow')

result =

  5×1 logical array

   0
   0
   1
   0
   0

>> fruittbl(result,1)

ans =

  1×1 cell array

    {'banana'}

>> fruittbl(result,2)

ans =

  1×1 cell array

    {'yellow'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...