如何在每个包含1x17个细胞的细胞上执行功能?

时间:2015-01-28 15:34:49

标签: matlab function cell cell-array

我有一个嵌套的单元格阵列' y2a'大小为1x128,每个单元格包含大小为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中进行此操作?

1 个答案:

答案 0 :(得分:0)

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

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

你可能会得到输出