使用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
答案 0 :(得分:1)
第x列和第y列之间的差异可以通过以下方式实现:
disp(myMatrix(:,x)-myMatrix(:,y));
disp()
函数实际上只是一个屏幕上的打印函数,此代码的核心依赖于myMatrix
括号内的内容:冒号运算符{ {1}}表示所有所以通过回忆圆括号中的第一个索引标识行而第二个索引标识列,说:
表示“返回所有行和x- myMatrix的第一栏“。
所以在你的具体案例中:
可以(分别)实现
myMatrix(:,x)
其中myMatrix(:,1)-myMatrix(:,3)
myMatrix(:,2)-myMatrix(:,3)
myMatrix(:,4)-myMatrix(:,3)
显然是你的21x4矩阵。
如果要在矩阵中连接这些值,可以通过简单的数组连接轻松完成:
myMatrix
其中每个结果列都是myOutput=[myMatrix(:,1)-myMatrix(:,3) , myMatrix(:,2)-myMatrix(:,3) , myMatrix(:,4)-myMatrix(:,3)];
中的列。最后,您还可以通过myOutput
命令显示整个myOutput
矩阵。
答案 1 :(得分: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)]
答案 2 :(得分:1)
要计算相对于给定列的差异,您可以使用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