Calculate the sum of all the relations between a matrix components
1 次查看(过去 30 天)
显示 更早的评论
Hi, does anyone know how I can calculate the sum of all the relations between a matrix components? For example by having a 3*3 matrix like:
a=[a11,a12,a13;a21,a22,a23;a31,a32,a33];
I want to calculate a relation between all the components such that:
r11=((a11-a12)/(a11+a12) + (a11-a13)/(a11+a13) + (a11-a21)/(a11+a12) + (a11-a22)/(a11+a22) + (a11-a23)/(a11+a23)+...
(a11-a31)/(a11+a31) + (a11-a32)/(a11+a32) + (a11-a33)/(a11+a33))/n;
n=8; %Number of matrix components-1 in this case
I want to do this for every components of the matrix (each component has interaction with every other components) so that I have:
r12,r13,r21,r22,r23,r31,r32,r33
I used for loop but it takes a long time and long code to calculate the results (my real matrix is 101*101). Is there any simple way to do that? Thank you.
1 个评论
John D'Errico
2021-6-26
I don't see why a well written loop would take that long of a time here. Perhaps your problem is poorly written code? For example, are you naming individual variables r11, r12, etc?
采纳的回答
DGM
2021-6-27
This could be done various ways. You could do this with loops if it's easier to understand. I'll just do this:
% example inputs
A = [1 2 3; 4 5 6; 7 8 9];
n = numel(A)-1;
F = @(x) sum((x-A)./(x+A),'all')/n; % define a function to calculate each sum
R = arrayfun(F,A) % calculate all of them
Using numbered variable names is a great way to cause problems for yourself. If you can embed indexing information within the variable name, then you can just use an array and index into it like normal.
3 个评论
DGM
2021-7-8
I'm just going to use a loop.
A = [1 2 3; 4 5 6; 7 8 9];
B = [1 2 3; 4 5 6; 7 8 9]*10;
C = [1 2 3; 4 5 6; 7 8 9]*100;
% if you use a cell array, the relative matrix sizes don't matter
D = {A,B,C};
R = cell(size(D));
for d = 1:numel(D)
thismat = D{d};
n = numel(thismat)-1;
F = @(x) sum((x-thismat)./(x+thismat),'all')/n;
R{d} = arrayfun(F,thismat);
end
celldisp(R)
Of course, these example results are identical because the inputs are all proportional.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!