命令diff
计算两个连续元素之间的差。有什么方法可以计算两个非连续元素之间的差异?
例如,使用
x = [1,2,3,4,5,6]
有什么命令可以找到
[x(3)-x(1),x(4)-x(2),x(5)-x(3),x(6)-x(4)] = [2,2,2,2]
或
[x(4)-x(1),x(5)-x(2),x(6)-x(3)] = [3,3,3]
通常,对于矩阵而言?我可以为此编写一些代码;我只是想知道Matlab中是否有用于此的命令?
矩阵案例的一个例子
x = [1,2,3,4;1,3,5,7;2,4,6,8]
我们想找到
[x(1,3)-x(1,1),x(1,4)-x(1,2);x(2,3)-x(2,1),x(2,4)-x(2,2);x(3,3)-x(3,1),x(3,4)-x(3,2)] = [2,2;4,4;4,4]
答案 0 :(得分:4)
我将对内核[1 0 ··· 0 -1]
使用卷积,其中零的数目取决于所需的步骤。可以使用功能conv
:
x = [1,2,3,4,5,6]; % data
s = 2; % step
result = conv(x, [1 zeros(1,s-1) -1], 'valid');
给予
result =
2 2 2 2
上述内容可以使用convn
进行概括,其内核定义如前,但沿所需维度定位:
x = [1,2,3,4; 1,3,5,7; 2,4,6,8]; % data
s = 2; % step
d = 2; % dimension
result = convn(x, reshape(([1 zeros(1,s-1) -1]), [ones(1,d-1) s+1 1]), 'valid');
给予
result =
2 2
4 4
4 4
答案 1 :(得分:4)
我不知道这样的功能,但是您可以简单地设置一个非常简单的匿名功能
stepDiff = @(x, s) x(:, s:end)-x(:, 1:end-s+1);
将给出如下输出:
x = [1, 2, 3, 4, 5, 6];
>> stepDiff(x, 2)
ans =
1 1 1 1 1
>> stepDiff(x, 4)
ans =
3 3 3
x = [1, 2, 3, 4; 1, 3, 5, 7; 2, 4, 6, 8];
>> stepDiff(x, 3)
ans =
2 2
4 4
4 4