Припустимо, у мене є 3D-матриця A
розміру (1,2,3). Щось на зразок
A(:,:,1) =
[1 2]
A(:,:,2) =
[3 4]
A(:,:,3) =
[5 6]
Як я хотів би знайти 3 значення, які складають суму перших двох вимірів, наприклад.
sum(A(:,:,1) = 3
Вищесказане працює, але коли спробую це для масиву з більшими розмірами, скажіть A
є розміром (5,5,5), то я отримую 2D-масив як відповідь, але я хочу одне значення, підводячи підсумок значення цього масиву.
Відповіді:
2 для відповіді № 1Спробуй reshape
всередині твого sum
щоб покласти кожну 2D матрицю в один стовпець:
sum(reshape(A,[],size(A,3)))
Наприклад:
>> A = randi(3,2,3,3)
A(:,:,1) =
1 3 1
2 2 1
A(:,:,2) =
1 2 2
1 2 3
A(:,:,3) =
2 2 1
3 3 3
>> sum(reshape(A,[],size(A,3)))
ans =
10 11 14
Наш ти міг зробити sum(sum(...))
.
РЕДАГУВАТИ: Узагальнено з size(A,3)
.
1 для відповіді № 2
Matlab sum()
функція має a sum(A,dim)
форма дзвінка, яка дозволяє працювати у певному вимірі. Так що ти міг зробити sum(sum(A,1),2)
. Це дозволило б отримати матрицю "1-на-1-на-3"результат підсумовування вздовж перших двох вимірів. Ви можете узагальнити це на інші параметри та змінити вигляд, як вам здається. Виходячи з вашого опису, схоже, що проблема, з якою ви вступаєте, є такою sum()
працює лише вздовж одного параметра за раз, і за замовчуванням - перше значення, а не всього, окрім останнього, в багатовимірному масиві.