Изменение значений в матрице в MATLAB - PullRequest
0 голосов
/ 14 марта 2011

У меня есть UNBALANCED набор данных, содержащий пять полей, таких как:

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

Я хочу создать 4-мерную матрицу в MATLAB для поля «значение».Поэтому я хочу иметь поле значения в матрице, например M(a_code,b_code,sector,year) = value.У меня 75 a_code, 75 b_code, 19 секторов и 45 лет.Таким образом, матрица NaN (75,75,19,45).

Поскольку мой набор данных не сбалансирован (например, у меня нет значения для a_code = 3, b_code = 1, sector = 15, year = 1970), у меня нет значения для каждого (a_code, b_code, сектор, год) комбинация.Для недоступных значений я хочу иметь NaN.Я знаю, как создать 4-мерную матрицу со значениями NaN, но как мне заменить эти значения NaN значениями в моем наборе данных?

Возможно, мне следует написать цикл, но я не знаю как.

1 Ответ

1 голос
/ 15 марта 2011

Вот простой код для удовлетворения ваших требований:

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 массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...