Trong Matlab, chúng ta có thể sụp đổ trên kích thước của một mảng như thế này:Làm cách nào để thu gọn mảng trên một tập hợp thứ nguyên cụ thể?
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
Tôi nghĩ rằng nó được gọi là serialising hoặc làm phẳng. Thứ tự của các yếu tố là dim1 đầu tiên, sau đó dim2, sau đó dim3 - để bạn có được [M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]
.
Nhưng những gì tôi muốn làm là sụp đổ chỉ dọc theo hai chiều đầu tiên:
mymatrix = M(:: , :); % something that works like this?
để đưa ra một ma trận 12 x 5. Vì vậy, ví dụ, bạn sẽ có được
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
Vì vậy mà kích thước đầu tiên của mymatrix
là "phẳng" 1st và kích thước thứ 2 của bản gốc M
, nhưng giữ gìn bất kỳ không gian khác.
Tôi thực sự cần làm điều này cho "kích thước trung bình 3" của mảng 5 chiều, vì vậy giải pháp chung sẽ tuyệt vời! ví dụ. W=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
nên cung cấp ma trận N x N^3 x N
nếu bạn hiểu ý tôi.
Cảm ơn
Cảm ơn bạn! Nên nghĩ về việc định hình lại. PS Tôi chỉ nghĩ về một cách khác mà dường như làm việc: 'tmp = permute (M, [1,5,2,3,4]);', 'mymatrix = tmp (:, :)'. Bạn không chắc chắn nó sẽ luôn hoạt động? Tất nhiên 'reshape' là ** nhiều ** thích hợp hơn. –