Измените 3-ю матрицу к 2-й матрице

У меня есть 3-я матрица (n-by-m-by-t) в представлении MATLAB n-by-m измерения в сетке в течение времени. Я хотел бы иметь 2-ю матрицу, где пространственная информация не стала и только n*m измерения со временем t оставлены (т.е.: n*m-by-t)

Как я могу сделать это?

23
задан Amro 13 February 2010 в 16:13
поделиться

2 ответа

Вам нужна команда reshape :

Допустим, ваша исходная матрица (только для меня, чтобы получить некоторые данные):

a=rand(4,6,8);

Затем, если последние две координаты являются пространственными (время 4, m равно 6, n равно 8), вы используете:

a=reshape(a,[4 48]);

и в итоге получаете массив 4x48.

Если первые два являются пространственными, а последний - временем (m = 4, n = 6, time = 8), вы используете:

a=reshape(a,[24 8]);

и в итоге получаете массив 24x8.

Это быстрая операция O (1) (она просто корректирует заголовок в зависимости от формы данных). Есть и другие способы сделать это, например a = a (:,:) , чтобы сжать последние два измерения, но изменение формы происходит быстрее.

28
ответ дан 29 November 2019 в 02:04
поделиться

Изменение формы, конечно же, стандартное решение для изменения формы массива. (Как бы еще они это назвали?) Еще предстоит раскрыть несколько уловок.

Прежде всего, самый простой способ превратить массив размера [n, m, p] в массив размера [n * m, p]?

B = reshape(A,n*m,p);

Но лучше это:

B = reshape(A,[],p);

Если вы оставите один из аргументов reshape пустой, затем reshape вычисляет размер за вас! Будьте осторожны, если вы попробуете это, и размер A не будет соответствовать, вы получите ошибку. Таким образом:

reshape(magic(3),[],2)
??? Error using ==> reshape
Product of known dimensions, 2, not divisible into total number of elements, 9.

По логике, мы не можем создать массив с двумя столбцами из того, что содержит 9 элементов. Я действительно поместил функцию под названием wreshape на центральный обмен MATLAB, которая при необходимости будет дополнять эту операцию без сгенерированных ошибок.

Конечно, вы всегда можете использовать уловки вроде

B = A(:);

, чтобы создать вектор прямо из матрицы. Это эквивалентно форме

B=reshape(A,[],1);
11
ответ дан 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: