假设我们要创建一个具有以下模式的向量:
[1 3 5 7 9]
我们可以很容易地写
1:2:10
但是如果我想要这个模式我应该怎么写:
[1 2 5 6 9 10 13 14 17 18 ....]
?
这背后的想法是我有一个长列矩阵:
[-0.41416 0.37756 -3.39666 -0.42352 0.83481 -0.66782 -0.75471 0.54008 -0.60284 -1.43141 -1.10128 -0.18244]
我想把它变成:
[-0.41416 0.37756 0 0 -3.39666 -0.42352 0 0 0.83481 -0.66782 0 0 -0.75471 0.54008 0 0 -0.60284 -1.43141 0 0 -1.10128 -0.18244 0 0]
对于每 2 个值,我想添加两个零。
如果我只想在每个值之间有 0 零,这就是我解决它的方法。
l = length(g);
nu = rows(g);
G = zeros(nu, l*nu);
for i = 1:nu
G(i, i:nu:l*nu-1+i) = g(i, 1:l);
end
g = G;
该代码将改变这种模式
[1.4392e-04 5.6149e-07 1.4572e-04 -1.1104e-05 1.4720e-04 -3.3176e-05 1.4836e-04
2.4174e-04 6.5988e-06 2.7917e-04 5.3787e-06 3.1924e-04 1.0706e-06 3.6204e-04]
进入这个模式:
[0.000221 0.000000 -0.000420 0.000000 0.000570 0.000000 -0.000418 0.000000
0.000000 0.017647 0.000000 -0.002033 0.000000 0.017248 0.000000 -0.001855]
最佳答案
您可以堆叠两个行向量(第二个等于一个加上第一个),然后对其进行整形:
>> a=[1:4:17];
>> b=reshape(vertcat(a,a+1),1,[])
b =
1 2 5 6 9 10 13 14 17 18
同样的想法扩展到您的第二个“背后的原因”示例:
>> c=[-0.41416 0.37756 -3.39666 -0.42352 0.83481 -0.66782 -0.75471 0.54008 -0.60284 -1.43141 -1.10128 -0.18244];
>> d=reshape(c,2,[]);
>> e=reshape(vertcat(d,0*d),1,[])
e =
Columns 1 through 12
-0.4142 0.3776 0 0 -3.3967 -0.4235 0 0 0.8348 -0.6678 0 0
Columns 13 through 24
-0.7547 0.5401 0 0 -0.6028 -1.4314 0 0 -1.1013 -0.1824 0 0
关于matlab - 如何在 MATLAB 中创建具有 [1 2 5 6 9 10 13 14 17 18 ....] 模式的向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61372846/