MATLAB Answers

Ana
0

Distance between all elements of row vector

Asked by Ana
on 17 Feb 2019
Latest activity Edited by per isakson
on 18 Feb 2019 at 19:48
So, I have 1x200 matrix, (row vector). I want to find difference (x(0)-x(1), x(0)-x(2)...) between all elements of an array. How do I do that ?
I should be having 200x200/2 values.

  0 Comments

Sign in to comment.

Tags

2 Answers

Answer by per isakson
on 17 Feb 2019
Edited by per isakson
on 17 Feb 2019
 Accepted Answer

Hint:
%%
row = rand(1,6);
cell2mat( reshape( arrayfun( @(jj) row(jj)-row, (1:6), 'uni', false ), [],1 ) )
outputs
ans =
0 -0.0790 -0.0644 0.2865 0.0233 0.5075
0.0790 0 0.0146 0.3655 0.1023 0.5866
0.0644 -0.0146 0 0.3509 0.0877 0.5719
-0.2865 -0.3655 -0.3509 0 -0.2633 0.2210
-0.0233 -0.1023 -0.0877 0.2633 0 0.4843
-0.5075 -0.5866 -0.5719 -0.2210 -0.4843 0

  4 Comments

Show 1 older comment
The x(jj)-x(jj) values are obviously on the main diagonal, but I guess that is of little help.
You could replace the x(jj)-x(jj) values by another value, e.g. NaN
%%
row = rand(1,6);
len = length(row);
dst = cell2mat( reshape( arrayfun( @(jj) row(jj)-row, (1:len), 'uni', false ), [],1 ) );
%%
lix = logical( eye(len) ); % logical index
dst( lix ) = NaN;
then you could do things like
>> dst >= 0.5
ans =
6×6 logical array
0 0 0 1 0 0
0 0 0 0 0 0
0 1 0 1 1 1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
and
>> dst == 0
Can you explain me exactly what does input into arrayfun mean?
( @(jj) center(jj)-center, (1:233), 'uni', false ), some kind of for loop ?
Yes, arrayfun performs a loop. Roughly
len = 233;
cac = cell( 1, len );
for jj = 1 : len
cac{jj} = center(jj) - center;
end

Sign in to comment.


Answer by madhan ravi
on 18 Feb 2019

Straightforward:
row.'-row

  3 Comments

I don't understand?
Did you run the code?
%%
row = rand(1,6);
c1 = cell2mat( reshape( arrayfun( @(jj) row(jj)-row, (1:6), 'uni', false ), [],1 ) );
%%
c2 = reshape(row,[],1) - row; % The name, reshape, communicates the intent
>> c2-c1
ans =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

Sign in to comment.