【问题标题】:How do I build a matrix using two vectors?如何使用两个向量构建矩阵?
【发布时间】:2017-02-19 07:06:39
【问题描述】:

所以我需要建立一个xy 坐标的矩阵。我将x 存储在一个名为vx=0:6000; 的矩阵中,y 存储在Vy=repmat(300,1,6000); 中。

x 中的值是 0,1,2,...,5999,6000y 中的值为 300,300,...,300,300

如何使用上面的x,y 坐标构建“矢量”?

看起来像这样[(0,300);(1,300);...;(5999,300);(6000,300)]

完成此操作后,我将要找到另一个固定点 x,y(我将复制 6000 次)与上面的向量之间的距离,以便随着时间的推移制作距离图。

非常感谢!

【问题讨论】:

    标签: matlab vector concatenation coordinates euclidean-distance


    【解决方案1】:

    您可以只使用与[] 的水平连接

    X = [Vx(:), Vy(:)];
    

    如果您想计算另一个点与此二维数组中每个点之间的距离,您可以执行以下操作:

    point = [10, 100];
    distances = sqrt(sum(bsxfun(@minus, X, point).^2, 2));
    

    如果您有 R2016b 或更新版本,您可以这样做

    distances = sqrt(sum((X - point).^2, 2));
    

    【讨论】:

    • @user3105028 你使用的: 和我写的完全一样。这迫使 xy 成为列向量。
    • >> p1 = [Vx(:), Vy(:)] 使用 horzcat 时出错 连接矩阵的维度不一致。
    • @user3105028 你想要你写的最后一个,但你在 vx 中有 6001 个元素,在 vy 中有 6000 个元素
    • 自 R2016b 以来,您应该能够摆脱 bsxfun
    • 你会用什么来代替 bsxfun,Adriaan?
    【解决方案2】:

    一个稍微优雅的替代方案(在我看来)如下:

    Vx = (0:1:6000).';
    C = [Vx 0*Vx+300];  % Just a trick to avoid the overly verbose `repmat`.
    
    p = [10,100];       % Define some point of reference.
    d = pdist2(C,p);    % The default "distance type" is 'euclidian' - which is what you need.
    

    这使用了 MATLAB 2010a 中引入的 pdist2 函数,并且需要 Statistics and Machine Learning Toolbox

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多