【发布时间】:2015-10-16 19:21:17
【问题描述】:
我想在给定大小矩阵的情况下生成一组所有 1 个矩阵(在此示例中为 dimensions),但我一直很难让维度矩阵返回 ones 可以的大小向量一起工作。
我的第一直觉是:dimensions(:,:)
我把这个(错误地)读成return a matrix of size vectors [x,y]
但这似乎不起作用——有没有办法使用维度来生成大小向量矩阵?
我很想使用循环进行迭代,因为 i = 1 到 3 dimensions(i,:),但我想知道这是否是唯一的方法。
代码:
clear;
%3x2
dimensions = [32,40; %32x40 box of ones
20, 30; %20x30 box of ones
60, 10; %60x10 box of ones
];
Onesboxes = ones(dimensions(1,:));
%this works, but I really want OnesBoxes to be an array such that:
%OnesBoxes(1) = 32x40 box of ones
%OnesBoxes(2) = 20x30 box of ones
%OnesBoxes(3) = 60x10 box of ones
% if I try:
OnesBoxes = ones(dimensions);
%Error using ones: Size vector should be a row vector with real elements.
%what I want to do is pass in sizes as rows in dimensions
%passing in the size of the ones array as a single vector works:
%onessize dimensions: 1x2
onessize = [4,2];
%tTestOnes dimensions: 4x2
tTestOnes = ones(onessize);
%making dimensions a 2x3 matrix instead doesn't seem to make a difference
%(I was thinking that maybe matlab thinks of matricies as an array of
%columns instead of arrays of rows?)
%dimensions2 = [32,20,60; 40,30,10];
%tOnesBoxes2 = ones(dimensions2);
编辑:输出:
输出
onessize = [4,2];
%tTestOnes dimensions: 4x2
tTestOnes = ones(onessize);
是一个全为 1 的 4x2 数组
输出
dimensions = [32,40; %32x40 box of ones
20, 30; %20x30 box of ones
60, 10; %60x10 box of ones
];
Onesboxes = ones(dimensions(1,:));
是一个 32x40 的数组
输出
dimensions = [32,40; %32x40 box of ones
20, 30; %20x30 box of ones
60, 10; %60x10 box of ones
];
OnesBoxes = ones(dimensions);
是个错误
错误使用一个大小向量应该是一个行向量与实 元素。
【问题讨论】:
-
你能举一个输入输出准确的例子吗?
-
添加了输出——抱歉,我不确定你所说的输入是什么意思,维度数组指定了这些数组的大小
-
Luis,我打算评论你的答案:这看起来像我正在寻找的东西,但你能解释为什么有必要通过
ones单元格,而不是通过 @987654331dimensions中的 @ 行?似乎单元格具有更严格的分组,而ones之前可能误解了我的 3x2dimensions矩阵? FWIW 在我看来这是一个有用的答案,你为什么要删除它? -
我删除了它,因为在写完它之后,我看到另一个较早的答案非常相似(只有一个明确的
for循环而不是cellfun)。您需要传递定义矩阵大小的ones向量。如果你想要几个矩阵,你需要多次调用ones。要收集所有生成的矩阵,您需要一个元胞数组,因为矩阵具有不同的大小。我的回答没有通过ones单元格。它传递了向量。我使用单元格作为中间步骤来拆分输入并让蜜蜂能够使用cellfun。但这与 Praveen 的答案相同 -
If you want several matrices, you need to call ones several times这就是我要找的东西——每次调用只能制作一个矩阵。To collect all resulting matrices you need a cell array because the matrices have different sizes还回答了我关于:限制的其他问题——如果你把它放在答案中,我会将其标记为已接受
标签: matlab