在MATLAB中更改矩阵中的值

时间:2011-03-14 20:26:35

标签: matlab

我有一个包含五个字段的UNBALANCED数据集:

a_code  b_code sector  year  value 
1        2      15     1970  1000   
2        3      16     1971  2900
3        2      15     1970  3900    

我想在MATLAB中为“value”字段创建一个4维矩阵。所以我希望在M(a_code,b_code,sector,year) = value等矩阵中有一个值字段。我有75 a_code,75 b_code,19个部门和45年。所以NaN矩阵是(75,75,19,45)。

由于我的数据集不均衡(例如我没有a_code = 3b_code = 1sector = 15year = 1970的值,我没有每个(a_codeb_code,部门,年份)组合的值。对于不可用的值,我想要NaN。我知道如何使用NaN值创建一个四维矩阵,但是如何将这些NaN值替换为我的数据集中的那些?

可能我应该写一个循环,但我不知道如何。

1 个答案:

答案 0 :(得分:1)

以下是一些满足您要求的简单代码:

D= [1 2 15 1970 1000; 2 3 16 1971 2900; 3 2 15 1970 3900];
m= min(D(:, 1: end- 1))- 1;
shape= max(D(:, 1: end- 1))- m+ 1;

X= NaN(shape);
for k= 1: size(D, 1)
    n= D(k, 1: end- 1)- m;
    X(sub2ind(shape, n(1), n(2), n(3), n(4)))= D(k, end);
end
X(1, 1, 1, 1) %=> 1000
X(2, 2, 2, 2) %=> 2900
X(3, 1, 1, 1) %=> 3900

您可能希望详细说明您的具体情况,可能存在更合适的方法。例如,根据您的问题,为什么您需要将数据表示为4D数组,这一点并不十分清楚。