MATLAB Answers


extend a Matrix in every iteration

Asked by Fernando Arias on 18 May 2018 at 11:20
Latest activity Edited by jonas
on 18 May 2018 at 13:02

Hi, I'm having some problems with my code. I have a 3 dimension matrix in which index represent a coordinate, for example, a 10x10x10 array where the first index are 1, 1, 1 represent the point x=1, y=1 and z=1. And the value in the array represent the number of points in theese coordinates. Now I want to use ptCloud function, so I have to extract all the points from my array. What I'm trying is this (If I were in the case 10*10*10 matrix A):

for i=1:1000
[Yj Xj Zj]=ind2sub(size(A), i); 
value=A(Yj Xj Zj);
P=[Yj Xj Zj];

With this code I already have a matrix MAT whith every points. But the case is that my array is 200x200x160, and I noticed that in every iteration the time that the code requires increases a lot, so I think there would be something wrong in the for loop.

Thanks so much.


on 18 May 2018 at 11:50

The time for every iteration increases due to the size of MAT increasing with every iteration (can be fixed by preallocation). I don't understand what the desired output is, but I'm guessing there is a more effective way than a loop. What is MAT describing?

MAT is the matrix wich contains all points, for example, if there is a 3 in A(1,1,1) means that I have three points in (1,1,1) so I add 3 rows of [1, 1, 1] to the matrix MAT. Finally I would like to have a matrix with all points where first colum is x coordinate, seconx y and third z.

I think there would be another way quiker, becouse with this code I can't have the matrix in more than a day.

on 18 May 2018 at 12:54

EDIT: nvm, Mr. Cobeldick solved that beautifully

Sign in to comment.

1 Answer

Answer by Stephen Cobeldick on 18 May 2018 at 12:47
Edited by Stephen Cobeldick on 18 May 2018 at 12:52

A = randi(9,10,10,10);
[X,Y,Z] = ind2sub(size(A),1:numel(A));
mat = repelem([X(:),Y(:),Z(:)],A(:),1,1);

but I don't see much point in generating subscript indices: it would be easier to define and use linear indices:

idx = repelem(1:numel(A),A(:).')


Sign in to comment.

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today