В разных строках matlab имеется несколько совпадений значений, например 1 1 в первой и второй строке. Я хочу удалить все эти дубликаты, но добавив значения в третий столбец. В случае 1 1 это будет 7. Наконец, я хочу создать матрицу подобия, как показано ниже в ответе. Я не имею в виду значения 2 * в диагоналях, потому что я не буду рассматривать диагональные элементы в дальнейшей работе. Код ниже делает это, но не векторизован. Может ли это быть каким-то образом векторизованным. Пример приведен ниже.Векторизация суммы уникальных столбцов
datain = [ 1 1 3;
1 1 4;
1 2 5;
1 2 4;
1 2 3;
1 3 8;
1 3 7;
1 3 12;
2 2 22;
2 2 77;
2 3 111;
2 3 113;
3 3 456;
3 3 568];
cmp1=unique(datain(:,1));
cmp1sz=size(cmp1,1);
cmp2=unique(datain(:,2));
cmp2sz=size(cmp2,1);
thetotal=zeros(cmp1sz,cmp2sz);
for i=1:size(datain,1)
for j=1:cmp1sz
for k=1:cmp2sz
if datain(i,1)==cmp1(j,1) && datain(i,2)== cmp2(k,1)
thetotal(j,k)=thetotal(j,k)+datain(i,3);
thetotal(k,j)=thetotal(k,j)+datain(i,3);
end
end
end
end
Ответ
14 12 27
12 198 224
27 224 2048
Однажды я действительно должен научиться использовать ACCUMARRAY. – Edric
@ Edric: really :) – Jonas
@Jonas: Как я могу заставить его работать для чисел с плавающей запятой? – discipulus