【问题标题】:Displaying outputs of a vector into a vector将向量的输出显示为向量
【发布时间】:2016-03-11 00:53:49
【问题描述】:

使用Matlab,我想显示以下21x4向量数据的第1列和第3列、第2列和第3列、第4列和第3列之间的差异,并以21x3向量显示输出。

请问有人可以帮忙吗?

-48.0000 -46.0000 -38.0000 -39.0000

-51.0000 -49.3333 -41.5218 -48.0000

-49.0000 -51.6667 -44.0206 -49.0000

-55.0000 -53.3333 -45.9588 -49.0000

-56.0000 -54.3333 -47.5424 -52.0000

-52.0000 -53.6667 -48.8814 -52.0000

-53.0000 -51.0000 -50.0412 -48.0000

-48.0000 -51.6667 -51.0643 -48.0000

-54.0000 -52.0000 -51.9794 -48.0000

-54.0000 -52.6667 -52.8073 -50.0000

-50.0000 -52.3333 -53.5630 -50.0000

-53.0000 -54.3333 -54.2583 -50.0000

-60.0000 -54.6667 -54.9020 -51.0000

-51.0000 -54.0000 -55.5012 -51.0000

-51.0000 -51.6667 -56.0618 -51.0000

-53.0000 -52.3333 -56.5884 -51.0000

-53.0000 -55.6667 -57.0849 -53.0000

-61.0000 -58.6667 -57.5545 -53.0000

-62.0000 -61.0000 -58.0000 -60.0000

-60.0000 -60.0000 -58.4238 -58.0000

-58.0000 -59.6667 -58.8279 -58.0000

【问题讨论】:

    标签: arrays matlab matrix vector


    【解决方案1】:

    首先,将值保存到变量中,如下所示:

    var = [...
    -48.0000 -46.0000 -38.0000 -39.0000
    -51.0000 -49.3333 -41.5218 -48.0000
    -49.0000 -51.6667 -44.0206 -49.0000
    -55.0000 -53.3333 -45.9588 -49.0000
    -56.0000 -54.3333 -47.5424 -52.0000
    -52.0000 -53.6667 -48.8814 -52.0000
    -53.0000 -51.0000 -50.0412 -48.0000
    -48.0000 -51.6667 -51.0643 -48.0000
    -54.0000 -52.0000 -51.9794 -48.0000
    -54.0000 -52.6667 -52.8073 -50.0000
    -50.0000 -52.3333 -53.5630 -50.0000
    -53.0000 -54.3333 -54.2583 -50.0000
    -60.0000 -54.6667 -54.9020 -51.0000
    -51.0000 -54.0000 -55.5012 -51.0000
    -51.0000 -51.6667 -56.0618 -51.0000
    -53.0000 -52.3333 -56.5884 -51.0000
    -53.0000 -55.6667 -57.0849 -53.0000
    -61.0000 -58.6667 -57.5545 -53.0000
    -62.0000 -61.0000 -58.0000 -60.0000
    -60.0000 -60.0000 -58.4238 -58.0000
    -58.0000 -59.6667 -58.8279 -58.0000 ];
    

    其次,可以通过var的第一个参数访问列,并使用特殊字符“:”选择所有行值;那就是:

    var(:,1) 将选择第 1 列中的所有值。

    var(:,1)-var(:,2) 
    

    将为您提供这两列之间的区别。

    你可以解决剩下的。

    您的输出可以更简单地显示为:

    output = [var(:,1)-var(:,3) var(:,2)-var(:,3) var(:,4)-var(:,3)]
    

    【讨论】:

    • var(:,[1 2 4]) - var(:,3) 应该做同样的事情,对吧?
    • @beaker 在 Octave 中是的 ;-)
    • 在 Matlab 中 bsxfun(@minus,var(:,[1 2 4]),var(:,3)) 会做
    • 谢谢。你们是最棒的!
    【解决方案2】:

    第x列和第y列的区别可以如下实现:

    disp(myMatrix(:,x)-myMatrix(:,y));
    

    disp()函数实际上只是一个屏幕打印函数,这段代码的核心依赖于myMatrix括号内的内容:冒号运算符:表示全部所以回想一下圆括号中的第一个索引标识行,而第二个索引标识列,myMatrix(:,x) 表示“返回 myMatrix 的所有行和第 x 列”。

    所以在你的具体情况下:

    • 第 1 列和第 3 列之间的差异
    • 第 2 列和第 3 列之间的差异
    • 第 4 列和第 3 列之间的差异

    可以(分别)实现为

    myMatrix(:,1)-myMatrix(:,3)
    myMatrix(:,2)-myMatrix(:,3)
    myMatrix(:,4)-myMatrix(:,3)
    

    myMatrix 显然是您的 21x4 矩阵。

    如果你想在一个矩阵中连接这些值,这可以通过简单的数组连接来轻松完成:

    myOutput=[myMatrix(:,1)-myMatrix(:,3) , myMatrix(:,2)-myMatrix(:,3) , myMatrix(:,4)-myMatrix(:,3)];
    

    其中每个结果列都将是myOutput 中的一列。最后,借助disp() 命令,您还可以显示整个myOutput 矩阵。

    【讨论】:

    • 谢谢。你们是最棒的!
    【解决方案3】:

    要计算给定列的差异,您可以使用bsxfun,如下所示:

    x = [-48.0000 -46.0000 -38.0000 -39.0000
         -51.0000 -49.3333 -41.5218 -48.0000
         -49.0000 -51.6667 -44.0206 -49.0000
         -55.0000 -53.3333 -45.9588 -49.0000
         -56.0000 -54.3333 -47.5424 -52.0000]; %// data
    c = 3; %// index of reference column
    y = bsxfun(@minus, x(:, [1:c-1 c+1:end]), x(:,c));
    

    给了

    y =
      -10.0000   -8.0000   -1.0000
       -9.4782   -7.8115   -6.4782
       -4.9794   -7.6461   -4.9794
       -9.0412   -7.3745   -3.0412
       -8.4576   -6.7909   -4.4576
    

    【讨论】:

    • 谢谢。你们是最棒的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2016-05-19
    相关资源
    最近更新 更多