【问题标题】:MATLAB: creation of 3D array, vectorizing vs. loopingMATLAB:创建 3D 数组、矢量化与循环
【发布时间】:2011-11-01 19:17:35
【问题描述】:

我已经在这里搜索了我的问题的答案,但找不到,所以如果它已经存在,我提前道歉!

我要做的是在空间 (x,y,z) 中创建一个 3D 点的 3D 数组。我知道在一维向量中,您可以指定间隔,例如 1:5:20,以获得从 1 到 20 的向量,间隔为 5。我想做的是创建一个 3D 数组,最有可能是逐行最有效的,其中间距是单位向量 (ix, iy, iz)。例如,

    a(1,1,:) = [1, 1, 1]
    uv = [0.5 0.5 0.5]
    a(2,2,:) = [1.5, 1.5, 1.5]

等等。我知道这些数字不是“单位向量”,但想法就在那里。有没有类似a = [1, 1, 1] : uv : [end, end, end] 的东西???

【问题讨论】:

  • 我没有检查这个。但是试试看:a = [1:0.5:20 1:0.5:20 1:0.5:20];我认为它应该有效。

标签: arrays matlab vector


【解决方案1】:

您可能对mesh grid 感兴趣。

【讨论】:

  • +1 - 一般而言,一些网格变量可能对 OP 的问题空间最有用。但如果他真的只是想构造一个特定的简单多维数组,repmat 可能更直接有用。
  • 即,我想保持坐标之间的间距。我正在尝试使用给定的传感器尺寸和方向在 3D 空间中创建图像计划
【解决方案2】:

一个例子:

[X,Y,Z] = meshgrid(1:0.1:2, 1:0.1:2, 1:0.1:2);    %# they can be different
points = [X(:) Y(:) Z(:)];

plot3(points(:,1),points(:,2),points(:,3),'.')
box on, axis equal
xlabel x, ylabel y, zlabel z

【讨论】:

  • 如果我的一个单位向量(方向向量)包含一个为零的元素,这不起作用,因为你不能增加零:(
  • 如果您在水平平面上并且所有 z 坐标都相同,您会这样做。
  • @JoeMcG: 用两个非零分量调用meshgrid,然后在结果中添加一列1(或一些常量z坐标):[X,Y] = meshgrid(1:0.2:2,1:0.1:2); points = [X(:) Y(:) ones(numel(X),1)*9];
猜你喜欢
  • 2011-11-26
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2015-02-03
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多