Large Cell Array Manipulation?

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?

回答 (2 件)

Jan
Jan 2015 年 8 月 3 日

0 投票

Is N pre-allocated?
M = cell(1, Natoms);
for n = 1:Natoms
M{n} = P(N{n});
end

1 件のコメント

mfas
mfas 2015 年 8 月 3 日
編集済み: mfas 2015 年 8 月 3 日
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?

サインインしてコメントする。

Cedric
Cedric 2015 年 8 月 3 日
編集済み: Cedric 2015 年 8 月 3 日

0 投票

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.

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

2015 年 8 月 3 日

編集済み:

2015 年 8 月 3 日

Community Treasure Hunt

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

Start Hunting!

Translated by