Announce

PukiWiki contents have been moved into SONOTS Plugin (20070703)

Matlab Snippets

Table of Contents

Shift matrix

X([2:end 1])

Behavior of reshape

Conclusion: row first, col second, color third.
Note: row is the 1st dim, col is the 2nd dim, color is the 3rd dim in matlab.

>> A = 1:6

A =

     1     2     3     4     5     6

>> reshape(A,2,3)

ans =

     1     3     5
     2     4     6
>> A = repmat(1:4,3,1)

A =

     1     2     3     4
     1     2     3     4
     1     2     3     4

>> reshape(A,4,3)

ans =

     1     2     3
     1     2     4
     1     3     4
     2     3     4

>> reshape(A,2,6)

ans =

     1     1     2     3     3     4
     1     2     2     3     4     4

>> % How to reshape in x axe
>> reshape(A.', 6, 2).'

ans =

     1     2     3     4     1     2
     3     4     1     2     3     4
>>I(:,:,1) = [1 1 1;2 2 2]; I(:,:,2) = [3 3 3;4 4 4]; I(:,:,3) = [5 5 5; 6 6 6]
I(:,:,1) =

     1     1     1
     2     2     2


I(:,:,2) =

     3     3     3
     4     4     4


I(:,:,3) =

     5     5     5
     6     6     6

>>reshape(I,6,3)

ans =

     1     3     5
     2     4     6
     1     3     5
     2     4     6
     1     3     5
     2     4     6

>> reshape(permute(I,[2 1 3]),6,3).'

ans =

     1     1     1     2     2     2
     3     3     3     4     4     4
     5     5     5     6     6     6

>> reshape(permute(I,[3 2 1]),3,6)

ans =

     1     1     1     2     2     2
     3     3     3     4     4     4
     5     5     5     6     6     6

Get indices of starting 0 in [1 1 1 0 0 0 1 1 1 0 0]

A = [1 1 1 0 0 0 1 1 1 0 0]
% 1     1     1     0     0     0     1     1     1     0     0
conv(A, [1 -1]);
% 1     0     0    -1     0     0     1     0     0    -1     0     0
conv(A, [1 -1]) == -1
% 0     0     0     1      0    0     0     0      0     1     0
find(conv(A, [1 -1]) == -1)
% 4 10

uniq() keeping the sequence

e.g., [3 2 1 1 7 6 1 2 3 6] => [3 2 1 7 6]

A = [3 2 1 1 7 6 1 2 3 6]
[uniq, ind] = unique(A,'first')
uniq =
     1     2     3     6     7
ind =
     3     2     1     6     5
% ind means uniq == A(ind)
[sorted, ind] = sort(ind)
sorted =
     1     2     3     5     6
ind =
     3     2     1     5     4
uniq(ind)
ans =
     3     2     1     7     6

Lower triangular matrix into symmetric matrix

A = [1 0 0
      1 1 0
      1 1 1];
into
B = [1 1 1
       1 1 1
       1 1 1];

B = A + tril(A, -1).';

Normalize matrix

by colsum

A = ones(3, 4);
A ./ repmat(sum(A, 2), 1, 4);

by row sum

A ./ repmat(sum(A, 1), 3, 1);

by total sum

A ./ repmat(sum(sum(A)), 3, 4);

Hash array

struct would be most appropriate

hash = struct('key1', val1, 'key2', val2)
hash.key1