Matlab:我可以创建一个维数未知的矩阵吗?
Matlab: Can I create a matrix with unknown number of dimensions?
通常矩阵有 2 个维度,但在 MATLAB 中似乎没有限制矩阵可能具有的维度数。
创建一个4维矩阵,例如,我可以这样做:
>> x = zeros(2,2,2,2)
x(:,:,1,1) =
0 0
0 0
x(:,:,2,1) =
0 0
0 0
x(:,:,1,2) =
0 0
0 0
x(:,:,2,2) =
0 0
0 0
有没有办法创建一个只有运行时才知道维数的矩阵?
您可以这样调用 zeros
:
x = zeros([2 2 2 2])
因此,您可以根据需要自定义输入数组。
例如:创建一个2x2x2x2x2的矩阵(其中D=5,维数):
D = 5;
x = zeros(zeros(1, D) + 2)
Rafael 的回答一针见血。但是也有一种通用的方法来做这种事情,即使函数没有像 zeros
那样的矢量输入之类的东西的重载。您可以像这样使用 cell
数组:
>> dims = {2,2,2,2};
>> zeros(dims{:})
ans(:,:,1,1) =
0 0
0 0
ans(:,:,2,1) =
0 0
0 0
ans(:,:,1,2) =
0 0
0 0
ans(:,:,2,2) =
0 0
0 0
我发现这种方法对其他功能非常有用。
编辑:
这种方法更可靠。这是另一个例子:
imginfo = { rand(40), [0 1], 'Colormap', colormap(jet) };
figure, imshow(a{:});
通常矩阵有 2 个维度,但在 MATLAB 中似乎没有限制矩阵可能具有的维度数。
创建一个4维矩阵,例如,我可以这样做:
>> x = zeros(2,2,2,2)
x(:,:,1,1) =
0 0
0 0
x(:,:,2,1) =
0 0
0 0
x(:,:,1,2) =
0 0
0 0
x(:,:,2,2) =
0 0
0 0
有没有办法创建一个只有运行时才知道维数的矩阵?
您可以这样调用 zeros
:
x = zeros([2 2 2 2])
因此,您可以根据需要自定义输入数组。
例如:创建一个2x2x2x2x2的矩阵(其中D=5,维数):
D = 5;
x = zeros(zeros(1, D) + 2)
Rafael 的回答一针见血。但是也有一种通用的方法来做这种事情,即使函数没有像 zeros
那样的矢量输入之类的东西的重载。您可以像这样使用 cell
数组:
>> dims = {2,2,2,2};
>> zeros(dims{:})
ans(:,:,1,1) =
0 0
0 0
ans(:,:,2,1) =
0 0
0 0
ans(:,:,1,2) =
0 0
0 0
ans(:,:,2,2) =
0 0
0 0
我发现这种方法对其他功能非常有用。
编辑:
这种方法更可靠。这是另一个例子:
imginfo = { rand(40), [0 1], 'Colormap', colormap(jet) };
figure, imshow(a{:});