gpt4 book ai didi

Matlab - 创建两个数组,考虑两个对象的所有可能值

转载 作者:行者123 更新时间:2023-12-02 03:11:40 30 4
gpt4 key购买 nike

我有两个物理“物体”。我用两个不同的数组代表他们的位置。

• 对象 1 仅在 xy 平面内移动

• 对象 2 在所有三个物理维度上移动

目标:在不扭曲数据的情况下对四个 for 循环进行向量化。此外,目的是对对象 1 的所有可能值执行此操作,以便与对象 2 进行比较。

这是代码片段:

Npos = 21;
Nsam = 200;

% dummy initialisation
AX = rand(1, Npos);
AY = zeros(1, Npos);
AZ = rand(1, Npos);
Bx = rand(Nsam);
By = rand(Nsam);
Bz = rand(Nsam);

for qx = 1 : Npos
for yx = 1 : Npos
for zx = 1 : Nsam
for cx = 1 : Nsam
Tx2Array( qx, yx, zx, cx ) = sqrt( ( AX( qx ) - Bx( zx, cx ) ).^2 + ( AY( yx ) - By( zx, cx ) ).^2 + ( AZ( yx ) - Bz( zx, cx ) ).^2 );
end
end
end
end
% Result is a 21 x 21 x 200 x 200 matrix filled with all real numbers

图例

AX、AY、AZ 是 1 x 21 数组,代表对象 1 的 (x,y=0,z)

AY 全部为零,但为了可读性仍然包含在内(因此没有第五个循环!)

Bx、By、Bz 都是 200 x 200 数组,代表对象 2 的 (x,y,z)

Npos = 21; Nsam = 200;

上面使用的公式是:

sqrt( (a1-b1)^2 + (a2-b2)^2 + (a3-b3)^2 )

最佳答案

如果您有可用的统计工具箱,则可以使用 pdist2计算对象 1 的每个坐标与对象 2 的每个坐标之间的距离:

[X1, Z1] = ndgrid(AX(:), AZ(:));   % X1 and Z1 will be 21x21
D = pdist2([X1(:), zeros(size(X1(:))), Z1(:)], [Bx(:), By(:), Bz(:)]);

本例中的输出将是一个 441 x 40,000 数组,其中 D(i, j) 给出点 i 之间的距离对象 1 的点和对象 2 的点 j,均使用线性索引。

关于Matlab - 创建两个数组,考虑两个对象的所有可能值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398762/

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