假设我希望定义矩阵,但矩阵的维数是Matlab中的变量(v)。
如果v = 1,那么
M(1:10)= 0;
如果v = 2,那么
M(1:10,1:10)= 0;
...
我想过如何使用“重塑”这样做,但我正在摸索如何做到这一点。
任何帮助都将不胜感激。
答案 0 :(得分:0)
你可以做到
switch v
case 1
M=zeros(1,10);%matrix of size 1,10
case 2
M=zeros(10,10);%matrix of size 10,10
end
答案 1 :(得分:0)
对于任意v
,您可以使用zeros
的矢量输入形式。由于此函数的工作原理,输入v=1
需要特殊处理,如果您希望它提供行向量(就像您的代码中的情况一样):
N = 10;
v = 3;
if v==1
sz = [1 N]; % or [N 1] for column vector
else
sz = repmat(N, 1, v);
end
M = zeros(sz);
同样,如果你喜欢它在一行:
M = zeros([repmat(1, 1, v==1) repmat(N, 1, v)]); % v=1 gives a row vector
或
M = zeros([repmat(N, 1, v) 1]); % v=1 gives a column vector
后者有效,因为Matlab数组有infinite number of trailing singleton dimensions。