从矩阵创建结构数组

时间:2015-03-04 16:43:32

标签: arrays matlab matrix

我有一个类似于此的结构数组:

AAA(1).Size = rand(1,10);
AAA(2).Size = rand(1,10);
AAA(...).Size = rand(1,10);
...

我有一个像这样的矩阵:

mMatrix = [rand(1,100); rand(1,100); ...]

如何在一次调用中将mMatrix的行值分配到AAA(此处称为NumberOfElement)中的新结构,而不必使用循环?

nRow = size(mMatrix, 1);
for ii = 1:nRow
    AAA(ii).NumberOfElement = mMatrix(ii,:);
end

此外,可以在AAA中为多个矩阵和多个新结构执行此操作,例如:

nRow = size(mMatrixDataset1, 1); % The matrices have the same number of rows
for ii = 1:nRow
    AAA(ii).NumberOfElementDataset1 = mMatrixDataset1(ii,:);
    AAA(ii).NumberOfElementDataset2 = mMatrixDataset2(ii,:);
    AAA(ii).NumberOfElementDataset3 = mMatrixDataset3(ii,:);
    ...
end

2 个答案:

答案 0 :(得分:3)

您可以将矩阵mMatrix拆分为多个单元格,其中每个单元格都是矩阵的一行。我们可以使用mat2cell执行此操作,然后使用单个展开调用分配给结构中的每个元素。无论先前是否已声明结构,这都将起作用。因此:

c = mat2cell(mMatrix, ones(size(mMatrix,1),1), size(mMatrix, 2));
[AAA(1:size(mMatrix,1)).NumberOfElement] = c{:};

使用示例

%// Set up code
mMatrix = rand(4, 100);

%// Code I wrote above
c = mat2cell(mMatrix, ones(size(mMatrix,1),1), size(mMatrix, 2));
[AAA(1:size(mMatrix,1)).NumberOfElement] = c{:};

AAA = 

1x4 struct array with fields:

    NumberOfElement

我们可以使用for循环遍历每个结构,以显示每个NumberOfElement字段的外观:

for ii = 1 : size(mMatrix, 1)
    disp(['Structure ' num2str(ii)]);
    disp(['Row ' num2str(ii) ' of matrix']);
    disp(mMatrix(ii,:));
    disp('Structure contents')
    disp(AAA(ii).NumberOfElement);
end

上面的代码显示了mMatrix中存储的矩阵的每一行,以及结构中每个元素的实际字段。

我明白了:

Structure 1
Row 1 of matrix
  Columns 1 through 8
    0.4229    0.6959    0.0688    0.4076    0.5313    0.7788    0.1537    0.4574
  Columns 9 through 16
    0.6377    0.2891    0.2548    0.3445    0.6022    0.4624    0.3225    0.1759
  Columns 17 through 24
    0.3411    0.2428    0.1887    0.6834    0.6476    0.2089    0.6073    0.7703
  Columns 25 through 32
    0.8419    0.5822    0.3181    0.4795    0.5439    0.2187    0.4046    0.6279
  Columns 33 through 40
    0.1920    0.5254    0.3935    0.3477    0.0445    0.6878    0.6834    0.3309
  Columns 41 through 48
    0.8217    0.7691    0.3774    0.3276    0.7689    0.5144    0.1999    0.7900
  Columns 49 through 56
    0.1117    0.1897    0.8507    0.5828    0.0005    0.5277    0.4981    0.7386
  Columns 57 through 64
    0.0835    0.8908    0.9283    0.8627    0.5523    0.3624    0.1231    0.0427
  Columns 65 through 72
    0.6952    0.1239    0.2703    0.4170    0.1057    0.5737    0.7378    0.9844
  Columns 73 through 80
    0.1776    0.9391    0.4671    0.5590    0.0542    0.8985    0.7069    0.4648
  Columns 81 through 88
    0.1781    0.3358    0.6754    0.7455    0.5972    0.8949    0.4417    0.0934
  Columns 89 through 96
    0.9954    0.2982    0.6311    0.9051    0.3381    0.0484    0.7297    0.6925
  Columns 97 through 100
    0.7802    0.1048    0.8905    0.0729
Structure contents
  Columns 1 through 8
    0.4229    0.6959    0.0688    0.4076    0.5313    0.7788    0.1537    0.4574
  Columns 9 through 16
    0.6377    0.2891    0.2548    0.3445    0.6022    0.4624    0.3225    0.1759
  Columns 17 through 24
    0.3411    0.2428    0.1887    0.6834    0.6476    0.2089    0.6073    0.7703
  Columns 25 through 32
    0.8419    0.5822    0.3181    0.4795    0.5439    0.2187    0.4046    0.6279
  Columns 33 through 40
    0.1920    0.5254    0.3935    0.3477    0.0445    0.6878    0.6834    0.3309
  Columns 41 through 48
    0.8217    0.7691    0.3774    0.3276    0.7689    0.5144    0.1999    0.7900
  Columns 49 through 56
    0.1117    0.1897    0.8507    0.5828    0.0005    0.5277    0.4981    0.7386
  Columns 57 through 64
    0.0835    0.8908    0.9283    0.8627    0.5523    0.3624    0.1231    0.0427
  Columns 65 through 72
    0.6952    0.1239    0.2703    0.4170    0.1057    0.5737    0.7378    0.9844
  Columns 73 through 80
    0.1776    0.9391    0.4671    0.5590    0.0542    0.8985    0.7069    0.4648
  Columns 81 through 88
    0.1781    0.3358    0.6754    0.7455    0.5972    0.8949    0.4417    0.0934
  Columns 89 through 96
    0.9954    0.2982    0.6311    0.9051    0.3381    0.0484    0.7297    0.6925
  Columns 97 through 100
    0.7802    0.1048    0.8905    0.0729
Structure 2
Row 2 of matrix
  Columns 1 through 8
    0.0942    0.6999    0.3196    0.8200    0.3251    0.4235    0.2810    0.8754
  Columns 9 through 16
    0.9577    0.6718    0.2240    0.7805    0.3868    0.4243    0.7847    0.7218
  Columns 17 through 24
    0.6074    0.9174    0.2875    0.5466    0.6790    0.7093    0.4501    0.3502
  Columns 25 through 32
    0.8329    0.5407    0.1192    0.6393    0.7210    0.1058    0.4484    0.7720
  Columns 33 through 40
    0.1389    0.5303    0.6714    0.1500    0.7549    0.3592    0.7040    0.4243
  Columns 41 through 48
    0.4299    0.3968    0.2160    0.6713    0.1673    0.8843    0.4070    0.3185
  Columns 49 through 56
    0.1363    0.4950    0.5606    0.8154    0.8654    0.4795    0.9009    0.5860
  Columns 57 through 64
    0.6260    0.9823    0.5801    0.4843    0.6299    0.0495    0.2055    0.6352
  Columns 65 through 72
    0.4991    0.4904    0.2085    0.2060    0.1420    0.0521    0.0634    0.8589
  Columns 73 through 80
    0.3986    0.3013    0.6482    0.8541    0.1771    0.1182    0.9995    0.7640
  Columns 81 through 88
    0.3596    0.1757    0.4685    0.7363    0.2999    0.0715    0.0133    0.3074
  Columns 89 through 96
    0.3321    0.0464    0.0899    0.5338    0.2940    0.6679    0.7073    0.5567
  Columns 97 through 100
    0.3376    0.1279    0.7990    0.0885
Structure contents
  Columns 1 through 8
    0.0942    0.6999    0.3196    0.8200    0.3251    0.4235    0.2810    0.8754
  Columns 9 through 16
    0.9577    0.6718    0.2240    0.7805    0.3868    0.4243    0.7847    0.7218
  Columns 17 through 24
    0.6074    0.9174    0.2875    0.5466    0.6790    0.7093    0.4501    0.3502
  Columns 25 through 32
    0.8329    0.5407    0.1192    0.6393    0.7210    0.1058    0.4484    0.7720
  Columns 33 through 40
    0.1389    0.5303    0.6714    0.1500    0.7549    0.3592    0.7040    0.4243
  Columns 41 through 48
    0.4299    0.3968    0.2160    0.6713    0.1673    0.8843    0.4070    0.3185
  Columns 49 through 56
    0.1363    0.4950    0.5606    0.8154    0.8654    0.4795    0.9009    0.5860
  Columns 57 through 64
    0.6260    0.9823    0.5801    0.4843    0.6299    0.0495    0.2055    0.6352
  Columns 65 through 72
    0.4991    0.4904    0.2085    0.2060    0.1420    0.0521    0.0634    0.8589
  Columns 73 through 80
    0.3986    0.3013    0.6482    0.8541    0.1771    0.1182    0.9995    0.7640
  Columns 81 through 88
    0.3596    0.1757    0.4685    0.7363    0.2999    0.0715    0.0133    0.3074
  Columns 89 through 96
    0.3321    0.0464    0.0899    0.5338    0.2940    0.6679    0.7073    0.5567
  Columns 97 through 100
    0.3376    0.1279    0.7990    0.0885
Structure 3
Row 3 of matrix
  Columns 1 through 8
    0.5985    0.6385    0.5309    0.7184    0.1056    0.0908    0.4401    0.5181
  Columns 9 through 16
    0.2407    0.6951    0.6678    0.6753    0.9160    0.4609    0.4714    0.4735
  Columns 17 through 24
    0.1917    0.2691    0.0911    0.4257    0.6358    0.2362    0.4587    0.6620
  Columns 25 through 32
    0.2564    0.8699    0.9398    0.5447    0.5225    0.1097    0.3658    0.9329
  Columns 33 through 40
    0.6963    0.8611    0.7413    0.5861    0.2428    0.7363    0.4423    0.2703
  Columns 41 through 48
    0.8878    0.8085    0.7904    0.4386    0.8620    0.5880    0.7487    0.5341
  Columns 49 through 56
    0.6787    0.1476    0.9296    0.8790    0.6126    0.8013    0.5747    0.2467
  Columns 57 through 64
    0.6609    0.7690    0.0170    0.8449    0.0320    0.4896    0.1465    0.2819
  Columns 65 through 72
    0.5358    0.8530    0.5650    0.9479    0.1665    0.9312    0.8604    0.7856
  Columns 73 through 80
    0.1339    0.2955    0.0252    0.3479    0.6628    0.9884    0.2878    0.8182
  Columns 81 through 88
    0.0567    0.2089    0.9121    0.5619    0.1341    0.2425    0.8972    0.4561
  Columns 89 through 96
    0.2973    0.5054    0.0809    0.1092    0.7463    0.6035    0.7814    0.3965
  Columns 97 through 100
    0.6079    0.5495    0.7343    0.7984
Structure contents
  Columns 1 through 8
    0.5985    0.6385    0.5309    0.7184    0.1056    0.0908    0.4401    0.5181
  Columns 9 through 16
    0.2407    0.6951    0.6678    0.6753    0.9160    0.4609    0.4714    0.4735
  Columns 17 through 24
    0.1917    0.2691    0.0911    0.4257    0.6358    0.2362    0.4587    0.6620
  Columns 25 through 32
    0.2564    0.8699    0.9398    0.5447    0.5225    0.1097    0.3658    0.9329
  Columns 33 through 40
    0.6963    0.8611    0.7413    0.5861    0.2428    0.7363    0.4423    0.2703
  Columns 41 through 48
    0.8878    0.8085    0.7904    0.4386    0.8620    0.5880    0.7487    0.5341
  Columns 49 through 56
    0.6787    0.1476    0.9296    0.8790    0.6126    0.8013    0.5747    0.2467
  Columns 57 through 64
    0.6609    0.7690    0.0170    0.8449    0.0320    0.4896    0.1465    0.2819
  Columns 65 through 72
    0.5358    0.8530    0.5650    0.9479    0.1665    0.9312    0.8604    0.7856
  Columns 73 through 80
    0.1339    0.2955    0.0252    0.3479    0.6628    0.9884    0.2878    0.8182
  Columns 81 through 88
    0.0567    0.2089    0.9121    0.5619    0.1341    0.2425    0.8972    0.4561
  Columns 89 through 96
    0.2973    0.5054    0.0809    0.1092    0.7463    0.6035    0.7814    0.3965
  Columns 97 through 100
    0.6079    0.5495    0.7343    0.7984
Structure 4
Row 4 of matrix
  Columns 1 through 8
    0.4709    0.0336    0.6544    0.9686    0.6110    0.2665    0.5271    0.9436
  Columns 9 through 16
    0.6761    0.0680    0.8444    0.0067    0.0012    0.7702    0.0358    0.1527
  Columns 17 through 24
    0.7384    0.7655    0.5762    0.6444    0.9452    0.1194    0.6619    0.4162
  Columns 25 through 32
    0.6135    0.2648    0.6456    0.6473    0.9937    0.0636    0.7635    0.9727
  Columns 33 through 40
    0.0938    0.4849    0.5201    0.2621    0.4424    0.3947    0.0196    0.1971
  Columns 41 through 48
    0.3912    0.7551    0.9493    0.8335    0.9899    0.1548    0.8256    0.0900
  Columns 49 through 56
    0.4952    0.0550    0.6967    0.9889    0.9900    0.2278    0.8452    0.6664
  Columns 57 through 64
    0.7298    0.5814    0.1209    0.2094    0.6147    0.1925    0.1891    0.5386
  Columns 65 through 72
    0.4452    0.8739    0.6403    0.0821    0.6210    0.7287    0.9344    0.5134
  Columns 73 through 80
    0.0309    0.3329    0.8422    0.4460    0.3308    0.5400    0.4145    0.1002
  Columns 81 through 88
    0.5219    0.9052    0.1040    0.1842    0.2126    0.0538    0.1967    0.1017
  Columns 89 through 96
    0.0620    0.7614    0.7772    0.8258    0.0103    0.5261    0.2880    0.0616
  Columns 97 through 100
    0.7413    0.4852    0.0513    0.9430
Structure contents
  Columns 1 through 8
    0.4709    0.0336    0.6544    0.9686    0.6110    0.2665    0.5271    0.9436
  Columns 9 through 16
    0.6761    0.0680    0.8444    0.0067    0.0012    0.7702    0.0358    0.1527
  Columns 17 through 24
    0.7384    0.7655    0.5762    0.6444    0.9452    0.1194    0.6619    0.4162
  Columns 25 through 32
    0.6135    0.2648    0.6456    0.6473    0.9937    0.0636    0.7635    0.9727
  Columns 33 through 40
    0.0938    0.4849    0.5201    0.2621    0.4424    0.3947    0.0196    0.1971
  Columns 41 through 48
    0.3912    0.7551    0.9493    0.8335    0.9899    0.1548    0.8256    0.0900
  Columns 49 through 56
    0.4952    0.0550    0.6967    0.9889    0.9900    0.2278    0.8452    0.6664
  Columns 57 through 64
    0.7298    0.5814    0.1209    0.2094    0.6147    0.1925    0.1891    0.5386
  Columns 65 through 72
    0.4452    0.8739    0.6403    0.0821    0.6210    0.7287    0.9344    0.5134
  Columns 73 through 80
    0.0309    0.3329    0.8422    0.4460    0.3308    0.5400    0.4145    0.1002
  Columns 81 through 88
    0.5219    0.9052    0.1040    0.1842    0.2126    0.0538    0.1967    0.1017
  Columns 89 through 96
    0.0620    0.7614    0.7772    0.8258    0.0103    0.5261    0.2880    0.0616
  Columns 97 through 100
    0.7413    0.4852    0.0513    0.9430

答案 1 :(得分:2)

这似乎适用于multiple matrices and multiple new structures使用cell2struct -

的一般情况
num_matrices = 3; %// Number of matrices to be used
fnames = {'set1','set2','set3'} %// Fieldnames for each matrix
M = cat(1,mat1,mat2,mat3) %// Concatenate all matrices into a single one

%// Form cell array version of the concatenated array and then the struct
C = reshape(mat2cell(M,ones(1,size(M,1)),size(M,2)),size(mat1,1),[])

%// Finally create the struct 
AAA = cell2struct(C,fnames,2)

示例输入和输出 -

>> mat1
mat1 =
    0.2232    0.9404    0.3981    0.6934    0.5052    0.6516    0.1042
    0.5832    0.8867    0.2036    0.5595    0.2792    0.4844    0.9474
    0.8316    0.0259    0.5718    0.0322    0.4067    0.9513    0.9229
    0.3041    0.2078    0.4503    0.4658    0.2488    0.0533    0.8370
>> AAA.set1
ans =
    0.2232    0.9404    0.3981    0.6934    0.5052    0.6516    0.1042
ans =
    0.5832    0.8867    0.2036    0.5595    0.2792    0.4844    0.9474
ans =
    0.8316    0.0259    0.5718    0.0322    0.4067    0.9513    0.9229
ans =
    0.3041    0.2078    0.4503    0.4658    0.2488    0.0533    0.8370

>> mat2
mat2 =
    0.1468    0.8309    0.3492    0.5820    0.1021    0.4695    0.5848
    0.9706    0.2005    0.5406    0.2961    0.3054    0.7118    0.1053
    0.4054    0.6320    0.3319    0.9196    0.8603    0.2329    0.7693
    0.8479    0.5877    0.8974    0.0810    0.8876    0.0734    0.5933
>> AAA.set2
ans =
    0.1468    0.8309    0.3492    0.5820    0.1021    0.4695    0.5848
ans =
    0.9706    0.2005    0.5406    0.2961    0.3054    0.7118    0.1053
ans =
    0.4054    0.6320    0.3319    0.9196    0.8603    0.2329    0.7693
ans =
    0.8479    0.5877    0.8974    0.0810    0.8876    0.0734    0.5933

等其他矩阵。