如何在Matlab中预分配和填充单元格数组

时间:2014-04-14 15:11:13

标签: string matlab cell-array

dataset=importdata(filename);
[r,c]=size(dataset.data);
names2=dataset.textdata(2:r+1, 1);
names1=dataset.textdata(1, 2:c+1);
rc=r*c;
couples=cell(rc, 2);
k=1
for i=1:r
  for j=1:c
     couples{k}=[names2(i), names1(j)];
     k=k+1;
  end
end

该文件包含一个表,第一行和第一列包含两个表示名称的字符串列表。我需要得到所有的弦乐队。

这是我想要的工作空间

names1   1xc cell
names2   1xr cell
couples  rcx2 cell

但是当我想象我得到的夫妻时

couples =
  1x2 cell  []
  1x2 cell  []
  1x2 cell  []
  ...

应该是

couples =
  nameA nameB
  nameC nameD
  nameE nameF
  ...

我知道可以获得此结果,因为importdata可以这样做并将字符串存储在textdata中。当你想象它们时,你得到了

names1 =
  name1
  name1
  ... 

我怎样才能得到理想的结果?我应该如何预先分配rcx2维度的单元格数组并将每对分配给第k行?我知道我可以通过concanation得到结果,但是它太慢了,有数千行。

1 个答案:

答案 0 :(得分:1)

您的实施几乎是正确的。您在第二列中包含单元格的原因是,如果要将couples{k}中的名称分配给单元格的第一列,则使用name2将两个对分配给第一列数组使用couples{k,1}name1到单元格数组的第二列使用couples{k,2}。尝试代码如下所示。

dataset=importdata(filename);
[r,c]=size(dataset.data);
names2=dataset.textdata(2:r+1, 1);
names1=dataset.textdata(1, 2:c+1);
rc=r*c;
couples=cell(rc, 2);
k=1
for i=1:r
  for j=1:c
     couples{k,1}=[names2(i)];
     couples{k,2}=[names1(j)];
     k=k+1;
  end
end