Если у вас есть матрица M
(которую вы можете получить из таблицы table2array(T)
), вы сможете использовать неявное расширение * и all
, чтобы получить свой результат
srch = [1 1 3 2016]; % Row to search for
res = find( all( M == srch, 2 ) );
find
преобразует логический массив, возвращаемый all
, в номера строк, где оно истинно.
Неявное расширение здесь в основном аналогично повторению массива srch
для всей высоты матрицыM
и затем поэтапную ==
операцию.Затем all
гарантирует, что каждое сравнение в данной строке было истинным (то есть совпадением для каждого элемента srch
).
* Неявное расширение основано на наличии MATLAB R2016b или новее ...для более старых версий вы можете добиться того же, используя bsxfun
.
Так же, как в альтернативном упражнении, вы можете использовать splitapply
вместо применения операторов all
и ==
для каждой строки по очереди это, вероятно, медленнее ...
res = find( splitapply( @(x)all(x==srch), M, (1:size(M,1)).' ) );
Или вы можете даже использовать rowfun
, что немного замаскировано, но будет работать наваш стол T
без предварительного преобразования в матрицу:
res = find( rowfun( @(varargin)all([varargin{:}]==srch), T, 'OutputFormat', 'uniform' ) );