我想创建一个N大小的数组,其输入均匀分布。为了澄清,我有一个数组的第一个和最后一个值,并希望用输入填充N大小的数组。
我使用了linspace
bars = 10;
DeapA = 1;
DeapB = 10;
diameter_pin = (linspace(DeapA, DeapB, bars))
给出了:
diamter_p =
1 2 3 4 5 6 7 8 9 10
但有没有办法通过填充数组来实现这一点?
我想这样做的原因是因为在上面更复杂的版本中,当我在方程中使用变量时,值没有被正确计算
答案 0 :(得分:1)
不确定你想要做什么,所以这里有几个答案
bars = 10;
DeapA = 1;
DeapB = 10;
diameter_pin = reshape(linspace(DeapA, DeapB, bars*bars), bars, bars)
给出一个数组,其中每列具有等间距的点,并且值通过列
不断增加diameter_pin =
1.0000 1.9091 2.8182 3.7273 4.6364 5.5455 6.4545 7.3636 8.2727 9.1818
1.0909 2.0000 2.9091 3.8182 4.7273 5.6364 6.5455 7.4545 8.3636 9.2727
1.1818 2.0909 3.0000 3.9091 4.8182 5.7273 6.6364 7.5455 8.4545 9.3636
1.2727 2.1818 3.0909 4.0000 4.9091 5.8182 6.7273 7.6364 8.5455 9.4545
1.3636 2.2727 3.1818 4.0909 5.0000 5.9091 6.8182 7.7273 8.6364 9.5455
1.4545 2.3636 3.2727 4.1818 5.0909 6.0000 6.9091 7.8182 8.7273 9.6364
1.5455 2.4545 3.3636 4.2727 5.1818 6.0909 7.0000 7.9091 8.8182 9.7273
1.6364 2.5455 3.4545 4.3636 5.2727 6.1818 7.0909 8.0000 8.9091 9.8182
1.7273 2.6364 3.5455 4.4545 5.3636 6.2727 7.1818 8.0909 9.0000 9.9091
1.8182 2.7273 3.6364 4.5455 5.4545 6.3636 7.2727 8.1818 9.0909 10.0000
如果希望行增加,可以采用此矩阵的转置。
这里,每一行都是相同的
>> nRows = 5;
>> nCols = 10;
>> a = 1;
>> b = 10;
>> diameter_pin = repmat(linspace(a, b, nCols), nRows, 1)
diameter_pin =
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
这里,每列都是相同的
>> nRows = 5;
>> nCols = 10;
>> a = 1;
>> b = 10;
>> diameter_pin = repmat(linspace(a, b, nRows)', 1, nCols)
diameter_pin =
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
3.2500 3.2500 3.2500 3.2500 3.2500 3.2500 3.2500 3.2500 3.2500 3.2500
5.5000 5.5000 5.5000 5.5000 5.5000 5.5000 5.5000 5.5000 5.5000 5.5000
7.7500 7.7500 7.7500 7.7500 7.7500 7.7500 7.7500 7.7500 7.7500 7.7500
10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000
在该矩阵中,每行以相同的差异等间隔,并且每列以相同的差异等间隔。如果行数和列数相同,那么整个矩阵的间隔相等!
首先是矩形矩阵:
>> nRows = 10;
>> nCols = 5;
>> a = 1;
>> b = 10;
>> x = linspace(a, b, nCols);
>> y = linspace(a, b, nRows);
>> [xx, yy] = meshgrid(x, y);
>> zz = mean(cat(3, xx, yy), 3)
zz =
1.0000 2.1250 3.2500 4.3750 5.5000
1.5000 2.6250 3.7500 4.8750 6.0000
2.0000 3.1250 4.2500 5.3750 6.5000
2.5000 3.6250 4.7500 5.8750 7.0000
3.0000 4.1250 5.2500 6.3750 7.5000
3.5000 4.6250 5.7500 6.8750 8.0000
4.0000 5.1250 6.2500 7.3750 8.5000
4.5000 5.6250 6.7500 7.8750 9.0000
5.0000 6.1250 7.2500 8.3750 9.5000
5.5000 6.6250 7.7500 8.8750 10.0000
现在您可以看到列间距相等:
>> diff(zz)
ans =
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 0.5000 0.5000
行间距相等
>> diff(zz')'
ans =
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
1.1250 1.1250 1.1250 1.1250
如果希望整个矩阵间隔相等,则需要相同数量的行和列。这是您的代码的翻译:
>> bars = 10;
>> DeapA = 1;
>> DeapB = 10;
>> x = linspace(DeapA, DeapB, bars);
>> diameter_pin = nan(bars, bars, 2);
>> [diameter_pin(:, :, 1), diameter_pin(:, :, 2)] = meshgrid(x, x);
>> diameter_pin = mean(diameter_pin, 3)
diameter_pin =
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000
1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000
2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000
3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000
3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000
4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000 8.5000
4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000 8.5000 9.0000
5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000 8.5000 9.0000 9.5000
5.5000 6.0000 6.5000 7.0000 7.5000 8.0000 8.5000 9.0000 9.5000 10.0000
此矩阵沿每个维度均匀分布。
那就是我能想到的一切。我建议您查看我调用的所有函数的MATLAB帮助文档。
答案 1 :(得分:0)
如果你想避免使用linspace
(虽然我不明白为什么),你可以使用:
diameter_pin = DeapA : (DeapB-DeapA)/(bars-1) : DeapB;