Создать 3D матрицу

35

Кто-нибудь знает, как определить 3D-матрицу в MATLAB, например матрицу размера (8 x 4 x 20) или добавить 3-мерное измерение в существующую 2D-матрицу?

Теги:
matrix

3 ответа

46
Лучший ответ

Создайте трехмерную матрицу

A = zeros(20, 10, 3);   %# Creates a 20x10x3 matrix

Добавить 3-мерное измерение в матрицу

B = zeros(4,4);  
C = zeros(size(B,1), size(B,2), 4);  %# New matrix with B size, and 3rd dimension of size 4
C(:,:,1) = B;                        %# Copy the content of B into C first set of values

нули - это всего лишь один из способов создания новой матрицы. Другой может быть A(1:20,1:10,1:3) = 0 для 3D-матрицы. Чтобы подтвердить размер ваших матриц, вы можете запустить: size(A), который дает 20 10 3.

Нет явной привязки к числу измерений, которые может иметь матрица.

  • 0
    Важно также отметить ответ Йонаса. Как уже говорилось, вы можете просто установить третье измерение, и MATLAB изменит для вас размер. Это не должно быть сделано в цикле, однако, и я думаю, что в целом этого следует избегать просто для ясности.
  • 2
    Обратите внимание, что A(1:20,1:10,1:3) = 0 может дать неправильный результат, если A уже существует.
9

Если вы хотите определить 3D-матрицу, содержащую все нули, вы пишете

A = zeros(8,4,20);

Все используют ones, все NaN использует NaN, все false использует false вместо zeros.

Если у вас есть существующая 2D-матрица, вы можете назначить элемент в "третьем измерении", и матрица будет дополнена новым элементом. Все остальные новые элементы матрицы, которые необходимо добавить для этого, устанавливаются на ноль.

Например

B = magic(3); %# creates a 3x3 magic square
B(2,1,2) = 1; %# and you have a 3x3x2 array
6

Я использую Octave, но Matlab имеет тот же синтаксис.

Создайте трехмерную матрицу:

octave:3> m = ones(2,3,2)
m =

ans(:,:,1) =

   1   1   1
   1   1   1

ans(:,:,2) =

   1   1   1
   1   1   1

Теперь, скажем, у меня есть 2D-матрица, которую я хочу развернуть в новом измерении:

octave:4> Two_D = ones(2,3)
Two_D =
   1   1   1
   1   1   1

Я могу расширить его, создав трехмерную матрицу, установив первый 2D в нее на мой старый (здесь у меня есть размер два третьего измерения):

octave:11> Three_D = zeros(2,3,2)
Three_D =

ans(:,:,1) =

   0   0   0
   0   0   0

ans(:,:,2) =

   0   0   0
   0   0   0



octave:12> Three_D(:,:,1) = Two_D
Three_D =

ans(:,:,1) =

   1   1   1
   1   1   1

ans(:,:,2) =

   0   0   0
   0   0   0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню