【问题标题】:Random selection of a member's location in a nested cell of cells: Matlab在单元格的嵌套单元格中随机选择成员的位置:Matlab
【发布时间】:2018-01-25 07:16:05
【问题描述】:

我有一个嵌套的单元格,如下所示:

CellArray={1,1,1,{1,1,1,{1,1,{1,{1 1 1 1 1 1 1 1}, 1,1},1,1},1,1,1},1,1,1,{1,1,1,1}};

我需要在CellArray 中随机选择一个位置。 CellArray的所有成员位置在随机选择过程中必须有相同的机会被选中。谢谢。

【问题讨论】:

  • 你可能会发现这个问题和the previous one of mine之间有轻微的联系
  • 随机位置的例子有哪些?
  • 你的意思是每个1 应该有相同的选择机会,根据显示的示例数组?
  • @rayryeng 示例可以是CellArray{1}CellArray{4}{4}{1} 或嵌套单元格中任何其他成员的位置

标签: matlab multidimensional-array random cell-array


【解决方案1】:

您可以捕获celldisp 函数的输出。然后使用正则表达式提取索引:

s=evalc('celldisp(CellArray,'''')');
m = regexp(s, '\{[^\=]*\}', 'match');
  • 感谢@excaza 建议更清晰地使用正则表达式

结果:

m =
{
  [1,1] = {1}
  [1,2] = {2}
  [1,3] = {3}
  [1,4] = {4}{1}
  [1,5] = {4}{2}
  [1,6] = {4}{3}
  [1,7] = {4}{4}{1}
  [1,8] = {4}{4}{2}
  [1,9] = {4}{4}{3}{1}
  [1,10] = {4}{4}{3}{2}{1}
  [1,11] = {4}{4}{3}{2}{2}
  [1,12] = {4}{4}{3}{2}{3}
  [1,13] = {4}{4}{3}{2}{4}
  [1,14] = {4}{4}{3}{2}{5}
  [1,15] = {4}{4}{3}{2}{6}
  [1,16] = {4}{4}{3}{2}{7}
  [1,17] = {4}{4}{3}{2}{8}
  [1,18] = {4}{4}{3}{3}
  [1,19] = {4}{4}{3}{4}
  [1,20] = {4}{4}{4}
  [1,21] = {4}{4}{5}
  [1,22] = {4}{5}
  [1,23] = {4}{6}
  [1,24] = {4}{7}
  [1,25] = {5}
  [1,26] = {6}
  [1,27] = {7}
  [1,28] = {8}{1}
  [1,29] = {8}{2}
  [1,30] = {8}{3}
  [1,31] = {8}{4}
}

使用randi 选择索引:

m{randi(numel(m))}

【讨论】:

  • 您可以从regexpm = regexp(s, '\{[^\=]*\}', 'match'); 得到相同的结果,我认为这是用户从正则表达式中得到的更清晰的表示。不过,非常聪明,+1
  • @rahnema1,@excaza 感谢您分享宝贵的知识。
  • @Amin 很高兴能帮上忙!
  • @rahnema1 作为一个小问题,如果我想更改CellArray 中选择的位置的值,我该怎么做?
  • @Amin eval 可能会有所帮助。 idx = 5;value = 3;eval(['CellArray' m{idx} '=' num2str(value) ';'])
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 2010-10-20
  • 2022-11-17
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
相关资源
最近更新 更多