Borrar filtros
Borrar filtros

Large Cell Array Manipulation?

1 visualización (últimos 30 días)
mfas
mfas el 3 de Ag. de 2015
Editada: Cedric el 3 de Ag. de 2015
I have a nx3 matrix in the from:
P=
x1 y1 z1
x2 y2 z2
. . .
. . .
. . .
xn yn zn
I have then used the rangesearch() function to find the points within a radius of 4 of each point in turn:
N=rangesearch(P,P,4)
Each cell in N gives the row numbers of these positions which is within the range.
How can I then manipulate N to contain the x,y,z positions of these points?
I have achieved this using:
for n=1:Natoms
N{n}=P(N{n});
end
however for large n the loop is very time consuming, is there a faster way or a preexisting function?

Respuestas (2)

Jan
Jan el 3 de Ag. de 2015
Is N pre-allocated?
M = cell(1, Natoms);
for n = 1:Natoms
M{n} = P(N{n});
end
  1 comentario
mfas
mfas el 3 de Ag. de 2015
Editada: mfas el 3 de Ag. de 2015
Yes N is pre-allocated, sorry that wasn't clear in the question. Is there a way of avoiding the loop entirely to achieve the same result?

Iniciar sesión para comentar.


Cedric
Cedric el 3 de Ag. de 2015
Editada: Cedric el 3 de Ag. de 2015
The loop is probably not the limiting factor. RANGESEARCH will be much slower than the loop, for almost any number of atoms. Try it in the profiler, type:
profile viewer
in the command window, type the name of your script in the field labeled "Run this code", click on [Start profiling], and you will see the report.
PS: you probably want
M{n} = P(N{n}, :); % or N if you update it instead of creating a new cell array.
in your loop.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by