我想创建一个长度为Ns(Ns+1)
的数组,我需要第一个Ns
元素为0
,下一个Ns
元素为1
,...
,最后Ns
为Ns
。
我很清楚有很多方法可以使用for-loops
执行此操作,我希望避免执行此特定任务。我正在寻找一种方法来使用matlab函数和矢量化的概念。
例如,我有一个类似的数组,我想用0, 1, 2, ..., Ns, 0, 1, 2, ..., Ns, 0, 1, 2, ...
填充,我用
my_array = repmat(0:Ns, 1, Ns+1);
是否有类似的方法来实现我的目的?
我认为我能做的一件事就是创建一个像
这样的矩阵0 0 0 ... 0
1 1 1 ... 1
... ... ...
Ns Ns .. Ns
然后连接线;我知道如何创建矩阵,但不知道如何将线连接成数组。
还有其他方法吗?命令的建议也是可以接受的!
感谢。
答案 0 :(得分:6)
你可以使用repmat
执行此操作,但使用repelem可以直接执行此操作:
my_array = repelem(0:Ns, Ns);
答案 1 :(得分:4)
这是另一种方式:
result = ceil(-1+1/Ns:1/Ns:Ns);
或者,对于一般数组:
data = [4 1 2 5];
Ns = 3;
result = data(ceil(1/Ns:1/Ns:numel(data)));
给出了
result =
4 4 4 1 1 1 2 2 2 5 5 5
即使没有ceil
也可以使用implicit rounding in colon indices(未记录;比实际更有趣):
data = [4 1 2 5];
Ns = 3;
result = data(.5:1/Ns:numel(data)+.5-1/Ns);
答案 2 :(得分:3)
reshape
命令可能是相关的
>> Ns = 3;
>> a = repmat(0:Ns, Ns, 1)
a =
0 1 2 3
0 1 2 3
0 1 2 3
>> b = reshape(a, 1, [])
b =
0 0 0 1 1 1 2 2 2 3 3 3