В вашем понимании в MATLAB нет наборов (я предполагаю, что вы думаете о кортежах на Python ...) Но есть ячейка s в MATLAB. Это тип данных, который может хранить практически все (вы можете подумать о указатель s, если вы знакомы с концепцией). На это указывает {
}
. Зная это, вы могли бы создать ячейку массивов и проверить их, используя cellfun
% create a cell of numeric arrays
C = {[1,0],[0,2],[99,-1]}
% check which input is equal to the array [1,0]
lg = cellfun(@(x)isequal(x,[1,0]),C)
Обратите внимание, что вы обращаетесь к адресу ячейки с ()
и к содержимому ячейки с {}
. []
всегда указывает массивы чего-либо. Мы подошли к этому через мгновение.
Хорошо, это была та часть, о которой вы просили; теперь есть бонус :
То, что вы используете термин set , заставляет меня чувствовать, что они всегда имеют одинаковый размер. Так почему бы не создать массив массивов (или лучше массив векторов, который является матрицей) и проверить эту матрицу по столбцам?
% array of vectors (there is a way with less brackets but this way is clearer):
M = [[1;0],[0;2],[99;-1]]
% check at which column (direction ",1") all rows are equal to the proposed vector:
lg = all(M == [0;2],1)
Этот способ немного яснее, лучше с точки зрения памяти и быстрее. Обратите внимание, что обе переменные lg
являются массивами логики. Вы можете использовать их непосредственно для индексации исходной переменной, то есть M(:,lg)
и C{lg}
возвращают набор , который вы ищете.