【问题标题】:How to perform functions on each cell containing 1x17 cells in itself?如何在每个包含 1x17 单元格的单元格上执行功能?
【发布时间】:2015-01-28 15:34:48
【问题描述】:

我有一个大小为 1x128 的嵌套元胞数组“y2a”,每个元胞都包含大小为 1x17 的元胞数组。

例如:y2a{1,1} 是一个 1x17 元胞数组。类似 y2a{1,2} 等等。

我必须使用以下公式将每个子单元格数组中的数据相乘(即 y2a{1,1} 或 y2a{1,2}...等)

  for cells 1-7 
   S=(celldata)*(2^(7-i))
  for cells 8-16
   S=(celldata)*(2^(7-i))

其中 'i' 是单元格的位置。由于只有 17 个子单元格并且只使用其中的 16 个,因此 i 的值在 (1,16) 之间变化。

y2a 中的每个嵌套单元都有一个 1 位二进制数作为其数据。

我想对每个 y2a 中存在的所有嵌套单元执行上述功能。 我尝试了以下代码来执行此操作

   Y=y2a{1,1}
   for j=1:1:7
       S1(1,j)=(Y(1,j))*(2^(7-j))
   end
   for k=8:1:16
       S2(1,k)=(Y(1,k)*(2^7-k))     
    end

这似乎对一个单元格有效,但是对于所有单元格都这样做,我在形成 for 循环时遇到了麻烦。我应该如何在 matlab 中执行?

【问题讨论】:

  • 谁给你这个用于定点数二进制表示的丑陋数据结构?
  • 你考虑过cat(1,y2a{:})吗?
  • @knedlsepp 它只是将大小为 1x128 的原始数组转换为 128x1 数组
  • 您已经证明您知道如何在 matlab 中访问元胞数组的内容,并且您已经有了伪代码---将其转换为 matlab 代码的障碍在哪里?
  • @knedlsepp 是的,丑陋,而且难以置信效率低下。

标签: matlab function cell cell-array


【解决方案1】:

先使用以下代码将嵌套元胞数组转换为二维矩阵

A = reshape(cell2mat([y2a{:}]),[],numel(y2a)).';

你也可以看看下面的链接,因为我也问过类似的问题 How to separate data from nested cells?

然后使用

执行所需的操作
B=num2cell(A);%convert it into a 2D matrix of size 128x17

for i3=1:1:128
for j = 1:1:7
S1{i3,j} = (B{i3,j})*(2^(7-j))
end
end

for i4=1:1:128
for k = 8:1:16
S2{i4,k} = (B{i4,k})*(2^(k-7))
end
end

你可能会得到输出

【讨论】:

  • 所以你问this question是为了回答这个问题?顺便说一句:第一行代码可以通过以下方式更简单地完成:A = cell2mat(cat(1,y2a{:}))
  • @knedlsepp 我对嵌套单元有同样的疑问......他没有得到任何答案......所以我想我可以问基本的,因为后一部分可以由任何人编码。 ..
猜你喜欢
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多