首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造包含不同尺寸的不同维矩阵的单元

构造包含不同尺寸的不同维矩阵的单元
EN

Stack Overflow用户
提问于 2017-01-04 15:22:57
回答 3查看 44关注 0票数 2

我现在的任务是构造一个单元格C,该单元格包含包含一维包含在向量中的矩阵。

n = [12 23 54]

当他们的第二个维度固定在

r = 3

所以,我想要细胞C = {rand(12,3), rand(23,3), rand(54,3)}.

我知道for-loop可以达到我的目的:

代码语言:javascript
复制
C=cell(3,1) % pre-allocation

for i = 1 : length(n)
    C{i} = rand(n(i),r);
end

我能知道我是否可以在不使用Matlab中的for loop的情况下更聪明地完成这个任务吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:24:47

在这个特定的场景中使用for循环并没有坏处(在大多数情况下,唯一的选择是cellfunarrayfun) as it is easier for MATLAB's JIT compiler to handle,但是如果您真的不喜欢for循环,那么可以使用在非均匀输出中组合的arrayfun来给出您想要的结果。

代码语言:javascript
复制
C = arrayfun(@(x)rand(x, r), n, 'UniformOutput', false);

由于上述原因,这实际上可能比for循环慢。但是,嘿,这是一条线,所以这才是最重要的!

票数 1
EN

Stack Overflow用户

发布于 2017-01-04 15:53:24

forwhile循环有各自的位置,即使在Matlab中也是如此。您可能被告知要避免这些操作,因为矢量化操作在遍历打包数字数组的行、列或其他维度时要快得多。但是,对于像单元数组这样的更高级别的构造,尝试以整洁的准矢量化语句来做事情通常没有优势(以及可读性的损失)。您现有的解决方案可能是最好的方法。

票数 1
EN

Stack Overflow用户

发布于 2017-01-04 16:02:32

一种更短的选择,只是为了好玩:

代码语言:javascript
复制
C = mat2cell(rand(sum(n),r), n,r)';

但是在这种情况下,普通循环几乎肯定是最快的,因为mat2cell使用一个循环,以及对它的输入进行大量检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41467313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档