在Matlab/Octave矩阵中使用范围

3

假设我想创建一个100x100的矩阵,其中每一行包含1-100的元素

A = [1:100; 1:100; 1:100... n]

显然,创建一个矩阵是不明智的,因为我需要创建100行,每行的范围都是1到100。
我认为我可以通过取一个“ones”数组并将每一行乘以一个向量来完成它...但我不确定如何做到这一点。
a = (ones(100,100))*([])

有什么提示吗?

任何技巧?


你也应该尝试使用meshgrid()函数。 - Dan
3个回答

5
你可以将一个长度为100的列向量乘以一个行向量 1:100
ones(3,1)*(1:3)
ans =

   1   2   3 
   1   2   3
   1   2   3

或者您可以使用repmat函数(如Phonon在我之前几秒钟写的那样)。


5
您可以使用重复矩阵函数(repmat())。您的代码将如下所示:
A = repmat( 1:100, 100, 1 );

这意味着您将 repmat 的第一个参数在垂直方向上重复100次,在水平方向上保持不变(即横向不做改变)。

非常感谢你们两位。两个回答都很完美。我将打钩给第一个回答的人。 - Joseph

2

是的,repmat是简单的解决方案,甚至可以说是正确的解决方案。但是,知道如何可视化您的目标以及如何创建产生该目标的内容将在MATLAB中带来长期的好处。因此,请尝试其他解决方案。例如...

cumsum(ones(100),2)

bsxfun(@plus,zeros(100,1),1:100)

ones(100,1)*(1:100)

cell2mat(repmat({1:100},100,1))

和枯燥的

repmat(1:100,100,1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接