为几个部分创建具有相同值的matlab数组

时间:2017-04-26 22:41:47

标签: matlab vectorization

我想创建一个长度为Ns(Ns+1)的数组,我需要第一个Ns元素为0,下一个Ns元素为1...,最后NsNs

我很清楚有很多方法可以使用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

然后连接线;我知道如何创建矩阵,但不知道如何将线连接成数组。

还有其他方法吗?命令的建议也是可以接受的!

感谢。

3 个答案:

答案 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