如何使用由字符串和整数组成的元素为多维数组赋值

时间:2014-12-18 10:54:26

标签: arrays matlab multidimensional-array

我有一个数组:

comb = [['',0],['',0],['',0],['',0],['',0],['',0],['',0],['',0],['',0],['',0]];

已经准备好填充数据,如下所示:

for i = 1:10
    comb(i) = [temp_gen(i, 1:end),temp_fitness(i)];
end

其中temp_gen是一个字符串数组,temp_fitness是一个整数数组,但它给出了以下错误:

In an assignment  A(:) = B, the number of elements in A and B must be the same.

Error in work (line 23)
    comb(i) = [temp_gen(i, 1:end),temp_fitness(i)];

导致此错误的原因是什么?我能在一个元素中使用两种不同的类型吗? (当我用一个整数数组替换temp_gen时,我仍然遇到同样的错误。

或者,有没有一种方法可以组合或关联不同数组中的相应元素,以便我可以对它们进行排序?例如,假设我有一个字符串数组和一个相应的整数数组,我想按整数的大小对它们进行排序。

说:string = 'a', 'b', 'c';ints = (1, 2, 3);如何将'a'1等关联起来,这样当我将ints排序为3,2时, 1 string也会更改为c, b, a

1 个答案:

答案 0 :(得分:1)

你有几个选择:

最常用的是使用cell array,因为它可以收集多种类型,所以

for i = 1:10
    comb{i} = {temp_gen(i, 1:end),temp_fitness(i)};
end

或更可能

for i = 1:10
    comb(i,1:2) = {temp_gen(i, 1:end),temp_fitness(i)};
end

或者您可以使用mat2cell

来避免循环
comb(:,2) = mat2cell(temp_fitness, ones(numel(temp_fitness),1))
comb(:,1) = temp_gen;

另一种选择是使用struct s:

的数组
for i = 1:10
    comb(i).name = temp_gen(i, 1:end);
    comb(i).number = temp_fitness(i);
end

第三个选项是将它们保持为两个独立的数组,并确保元素彼此对应。下面是一个如何对一个数组进行排序的示例,该数组在一秒内保持正确元素中的相应值(即使用sort的第二个输出):

[temp_fitness, ind] = sort(temp_fitness);
temp_gen = temp_gen(ind);