Bạn nên suy nghĩ 'theo chiều dọc '. Điều này sẽ cho phép bạn sử dụng lập chỉ mục thư đại tràng:
>> A(:,:,1) = [1,2,3;2,3,4].'; %'// NOTE: transpose of your original
>> A(:,:,2) = [3,4,5;4,5,6].'; %'// NOTE: transpose of your original
>> A(:,:)
ans =
1 2 3 4
2 3 4 5
3 4 5 6
Các chỉ mục thư đại tràng với hai dấu hai chấm công cho bất kỳ kích thước A
:
>> A(:,:,:,:,1,1) = [1 2 3; 2 3 4].'; %'
>> A(:,:,:,:,2,1) = [3 4 5; 4 5 6].'; %'
>> A(:,:,:,:,1,2) = [5 6 7; 6 7 8].'; %'
>> A(:,:,:,:,2,2) = [7 8 9; 8 9 0].'; %'
>> A(:,:)
ans =
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 0
Colon lập chỉ mục trong MATLAB là khá thú vị và thực sự hữu dụng khi bạn làm chủ nó. Ví dụ, nếu bạn sử dụng ít dấu hai chấm hơn là có kích thước trong mảng (như trên), MATLAB sẽ tự động nối phần còn lại của dữ liệu dọc theo kích thước bằng số lượng dấu hai chấm. Vì vậy, nếu A
có 48 kích thước, nhưng chỉ số của bạn chỉ với 2 dấu hai chấm: bạn sẽ nhận được một mảng 2D, đó là kết nối của 46 thứ nguyên còn lại dọc theo thứ nguyên 2 thứ.
Nói chung: nếu A
có N
kích thước, nhưng bạn chỉ số chỉ với M ≤ N
dấu hai chấm: bạn sẽ nhận được một mảng -D M
, đó là nối của N-M
kích thước còn lại dọc theo M
thứ kích thước.
Vì vậy, miễn là bạn có thể tự do định nghĩa A
của bạn để chứa vectơ trên cột chứ không phải là hàng (bạn nên tư vấn cho tất cả mọi người để làm điều này, vì hầu như tất cả mọi thứ trong MATLAB là một chút nhanh hơn theo cách đó) , Tôi nghĩ đây là cách nhanh nhất và thanh lịch nhất để làm những gì bạn muốn.
Nếu không, tốt, sau đó chỉ reshape
như Dan :)
+1 để sử dụng chi tiết toán tử:! – bla