2010-02-13 23 views
23

Bir zaman diliminde bir kılavuzda n-by-m ölçümlerini temsil eden MATLAB'da bir 3d matrisim var (n-by-m-by-t). Ben uzamsal bilgilerin gitti ve zaman t üzerinde sadece n*m ölçümler terk edildiği bir 2d matris, istiyorum (yani: n*m-by-t)2d matrisi için 3d matrisi yeniden şekillendirin

Bunu nasıl yapabilirim? Son iki koordinatları (uzaysal ise

a=rand(4,6,8); 

Sonra, zaman 4'tür:

(bana bazı verileri almak için sadece için) ilk matristir ki:

cevap

28

Komuta reshape gerek m 6'dır, n 8'dir)

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

ve bir 4x48 dizisiyle sonuçlanırsınız.

ilk iki uzamsal ve son kullanmak (süresi 8, m 4; n, 6'dır) süresi ise:

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

ve bir 24x8 dizisi ile biter.

Bu hızlı, O (1) işlemdir (yalnızca veri şeklinin başlığını ayarlar). Bunu yapmanın başka yolları vardır, örn. Son iki boyutu yoğunlaştırmak için a=a(:,:), ancak yeniden biçimlendirme daha hızlıdır.

11

Yeniden şekillendirmek, bir diziyi yeniden şekillendirmek için standart çözümdür. (Başka ne derler?) Hala ortaya çıkacak birkaç ipucu var.

Her şeyden önce, [n, m, p] boyutundaki bir diziyi [n * m, p] boyutuna dönüştürmenin en kolay yolu?

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

Ama daha iyi şudur:

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

boş yeniden şekillendirmek argümanlardan birini bırakırsanız, o zaman yeniden şekillendirmek sizin için boyutunu hesaplar! Dikkatli ol, eğer bunu denersen ve A'nın boyutu uymuyorsa, bir hata alacaksın. Böylece: 9 öğeye sahip bir öğeden iki sütun içeren bir dizi oluşturamayız. Mantıksal olarak, içinde 9 öğeye sahip bir öğeden iki sütun içeren bir dizi oluşturamayız. MATLAB Central değişkeni üzerinde wreshape isimli bir fonksiyon koymuş ve bu işlemin hatasız olarak yapılması için gereken şekilde ped takılabiliyordu. Tabii

, her zaman bir matris doğrudan bir vektör oluşturmak için

B = A(:); 

gibi hileler kullanabilirsiniz. Bu formda

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

bu soruna daha iyi bir çözüm Rasmus Bro N-yol araç kutusunda bulunan nshape.m kullanmaktır eşdeğerdir. Bu, yeniden şekillendirme komutunda biraz daha zor olan belirli bir modda yeniden şekillendirmenizi sağlar.

araç aşağıdaki bağlantıda mevcuttur:

https://www.mathworks.com/matlabcentral/fileexchange/1088-the-n-way-toolbox

yanı dizi manipülasyon yoluyla yardım etmeye bazı diğer mükemmel araçlar vardır.