我有一个数组/数字序列a=[1,2,3,4,5]
,我正在尝试
创建一个类似于下面的a_new
的数组/数字序列:
列代表数字应输入的订单/索引。
a_new=...
[1,2,3,4,5;
2,1,2,3,4;
3,3,1,2,3;
4,4,4,1,2;
5,5,5,5,1]
我的想法是在circshift
处使用,但很快发现这行不通。
a=[1,2,3,4,5];
for n=1:5
a_wrong(:,n)=circshift(a(:)',[0 n])(:)
end
产生
a_wrong=[
5 4 3 2 1
1 5 4 3 2
2 1 5 4 3
3 2 1 5 4
4 3 2 1 5]
有什么想法吗?如果那行不通,则不需要使用circshift
。
PS:我正在使用与Matlab相似的Octave 4.2
答案 0 :(得分:4)
可能有很多不同的方法来生成此矩阵。这是使用repmat
,toeplitz
,tril
和triu
函数的一个:
>> a_new = tril(repmat(a.', 1, numel(a)), -1)+triu(toeplitz(a))
a_new =
1 2 3 4 5
2 1 2 3 4
3 3 1 2 3
4 4 4 1 2
5 5 5 5 1
答案 1 :(得分:1)
我不确定内置函数,但这应该可行;
expect(checkbox.checked).toBe(true)
我的计算机上未安装Octave或MATLAB,因此无法对其进行测试。这可能有一个愚蠢的错误,请原谅我!
答案 2 :(得分:1)
您可以使用spdiags
生成矩阵:
n = numel(a);
a_new = spdiags([repmat(flip(a).',1,n); repmat(a,n-1,1)],(1-n):0);