gpt4 book ai didi

matlab - 在matlab中重组矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:57 24 4
gpt4 key购买 nike

我在 matlab 中有一个矩阵 x,它有 6*n*n*3 行和一列,代表点的 6*n*n 3d 坐标。坐标的排列方式是第 1:6*n*n 行是 x 坐标,第 6*n*n+1:12*n*n 行是 y 坐标,第 12*n*n+1:18*n* 行n为z坐标。

我想从中构建 2 个新矩阵,一个简单地将给定点的 x、y、z 坐标放在一起,另一个的第 i 行由点 i 减去每个其他点组成。

现在我正在使用双 for 循环执行此操作,这对于 n>16 来说非常慢。使用 matlab 向量/矩阵功能是否有更好/更快的方法?

这是我当前的代码

x=x(1:6*n*n);
y=y(6*n*n+1:12*n*n);
z=z(12*n*n+1:18*n*n);
N=6*n*n;
points=[];
difs=[];
for i=1:N
difrow=[];
points=[points;x(i) y(i) z(i)];
for j=1:N
deltax=x(i)-x(j);
deltay=y(i)-y(j);
deltaz=z(i)-z(j);
difrow=[difrow deltax deltay deltaz];
end

difs=[difs;difrow];
end

最佳答案

您可以使用 bsxfun 避免循环、数组 reshape 和连接(假设 x ,y,z 是大小为 [N x 1] 的列向量):

points = [x y z];
deltax = bsxfun(@minus,x.' , x);
deltay = bsxfun(@minus,y.' , y);
deltaz = bsxfun(@minus,z.' , z);
difs = reshape([deltax(:) deltay(:) deltaz(:)].',N*3,[]).';

或者在最新版本的 MATLAB 中,您可以:

points = [x y z];
deltax = x.' - x;
deltay = y.' - y;
deltaz = z.' - z;
difs = reshape([deltax(:) deltay(:) deltaz(:)].',N*3,[]).';

关于matlab - 在matlab中重组矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47251697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com