Matlab 如何在包含1x17单元的每个单元上执行功能?

Matlab 如何在包含1x17单元的每个单元上执行功能?,matlab,function,cell,cell-array,Matlab,Function,Cell,Cell Array,我有一个大小为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个子

我有一个大小为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中实现这一点?

首先使用以下代码将嵌套单元数组转换为2Dmatrix

A = reshape(cell2mat([y2a{:}]),[],numel(y2a)).';
你也可以看看下面的链接,因为我也问过类似的问题

然后使用以下命令执行所需操作:

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

你可能会得到输出

谁给你这个丑陋的数据结构来表示定点数的二进制表示?你考虑过cat1,y2a{:}?knedlsepp它只是将原来的1x128大小的数组转换成128x1数组你已经证明了你知道如何在matlab中访问单元格数组的内容,你已经有了伪代码——把它翻译成matlab代码的障碍在哪里?@knedlsepp是的,很难看,而且效率非常低。所以你问是为了回答这个问题?顺便说一句:第一行代码可以通过:A=cell2matcat1,y2a{:}更简单。@knedlsepp我对嵌套单元格也有同样的疑问……他没有得到任何答案……所以我想我可以问基本的一行,因为后面的部分可以由任何人编码。。。