【问题标题】:Creating a cell array of different randomized matrices创建不同随机矩阵的元胞数组
【发布时间】:2014-05-25 19:48:59
【问题描述】:

我正在尝试创建一个大小为 N 的元胞数组, 其中每个单元格都是大小为 M 的随机矩阵, 我尝试过使用交易或简单的分配,但最终结果总是 N 个大小为 M 的相同矩阵 例如:

N=20;
M=10;
CellArray=cell(1,N);
CellArray(1:20)={rand(M)};

这会在每个单元格中产生相同的矩阵,iv'e 尝试像这样编写分配:

CellArray{1:20}={rand(M)};

但这会产生以下错误:

此赋值右侧的值太少,无法满足左侧的要求。

最终结果应该是一组转移概率矩阵,用于我正在构建的模型, 有一个模型的当前工作版本,但它使用循环来创建矩阵,并且工作相当缓慢, 我会很感激任何帮助

【问题讨论】:

  • 循环解决方案有什么问题?当然,这不是代码的性能关键部分......
  • 我不确定,这不是实际代码,实际代码需要生成其中的500个,然后根据这些矩阵创建一些额外的变量

标签: arrays matlab random variable-assignment vectorization


【解决方案1】:

如果您不想使用循环,因为您对较短的执行时间感兴趣,请去掉这些单元格。

RandomArray=rand(M,M,N)

您可以使用 RandomArray(:,:,index) 访问每个切片,这是您想要的 MxM 矩阵

【讨论】:

  • 这听起来是个不错的解决方案!我试试看
  • @ronimb 如果你真的需要一个元胞数组:在末尾添加RandomArray = mat2cell(RandomArray,M,M,ones(1,N));
【解决方案2】:

使用cellfun:

N = 20;
M = 10;

CellArray = cellfun(@(x) rand(M), cell(1,N), 'uni',0)

对于它新调用的每个单元格rand(M) - 与以前不同,您将相同的rand(M) 分配给每个单元格,这只是计算一次。

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多