【发布时间】:2012-04-12 13:36:03
【问题描述】:
我正在模拟粒子的扩散。模拟坐标存储在矩阵中,格式格式如下:
data(:, 1) % overall track number
data(:, 2) % dataset number
data(:, 3) % individual track number (within dataset)
data(:, 4) % frame number
data(:, 5) % xcoordinate
data(:, 6) % ycoordinate
我想做的是创建另一个存储平方位移的矩阵。格式如下:
SD(:, 1) % overall track number (like in data matrix)
SD(:, 2:n) % squared displacement between 1st and n-th frame
请注意,每个数据集中的帧数不相等。如果每个轨迹中的帧数小于 n+1,则将其保留为 NaN。
我正在使用地球上最差和最慢的方法来计算它 - 通过几个 for 循环:
SD(:, 1) = data(:, 1);
for i=1:length(data(:, 1)) % I am taking each row
for j=1:lagsToCalculate % then every timelag (or n as described above)
if j<i % check if enough data from the 1st point
if data(i, 3) == data(i-j, 3) % and if it is still the same trajectory
% calculate square displacement
SD(i,j+1) = (data(i, 5)-data(i-j, 5))^2+(data(i, 6)-data(i-j, 6))^2;
else
SD(i, j+1) = NaN; % or set to NaN
end
else
SD(i, j+1) = NaN;
end
end
end
我确信有十亿倍有效的方法可以做到这一点,但我对 matlab(和编程)不是很流利,并且无法提出任何想法 :) 任何人都可以提出一些合理的建议吗?也许一些数据重组会有所帮助? 谢谢你的每一个想法:)
【问题讨论】:
标签: arrays matlab matrix organization