У меня есть два вектора U1
и U2
в Matlab измерения 9x1
, в обоих перечисляются целые числа от 1
до 9
.
clear
U1=(1:1:9).';
U2=U1;
Затем я строю вектор U
размером (9*9)x1
, взяв декартово произведение U1
и U2
[ca, cb] = ndgrid(U1, U2);
U=[ca(:) cb(:)];
По сути, структура U
равна
U=[1 1;
2 1;
...;
9 1;
---;
1 2;
...
9 2;
---;
...
9 9]
Теперь я быкак ваша помощь в построении вектора ind
, в котором перечислены индексы строк неупорядоченных пар строк U
, такие что:
(*) i~=k
и j~=l
где[i,j]
, [k,l]
- это две строки из U
, которые считаются
Я написал фрагмент кода, который делает то, что я хочу, но он не кажется мне очень эффективным из-за шага 1) ниже.Не могли бы вы помочь улучшить?
Шаг 1) Возьмите индексы строк ALL неупорядоченных пар строк из U
ind_temp=nchoosek([1:1:9^2], 2); %3240x2
Шаг 2) Удалить из ind_temp
индексы строк, которые не удовлетворяют (*)
ind=cell(size(ind_temp,1),1);
for p=1:size(ind,1)
if U(ind_temp(p,1),1)~=U(ind_temp(p,2),1) && ...
U(ind_temp(p,1),2)~=U(ind_temp(p,2),2)
ind{p}=ind_temp(p,:);
end
end
ind=vertcat(ind{:});