2014-09-08 10 views

cevap

8

Standard, deyimsel yolu:

endekslerin bir vektör kullanın: Bu arr bir hücre dizisi olup olmadığını çalışır

arr([i j]) = arr([j i]); %// arr can be any array type 

, sayısal bir dizi veya bir dize (char dizisi).


tavsiye (ama mümkünse) değil:

Eğer Python o daha benzer bir sözdizimi kullanmak (unsurların bir listesiyle yerine endekslerin bir vektörün) istiyorsanız, sizi deal işlevine gereksinim duyarsınız. Ancak ortaya çıkan ifade daha karmaşıktır ve arr'un bir hücre dizisi mi yoksa standart bir dizi mi olduğuna bağlı olarak değişir. Bu yüzden tavsiye edilmez (iki öğe değişimi için). Sadece şeyiyle dahil:

[arr{i}, arr{j}] = deal(arr{j}, arr{i}); %// for a cell array 
[arr(i), arr(j)] = deal(arr(j), arr(i)); %// for a numeric or char array 
+0

Teşekkür ederim, tam olarak aradığım şey bu. MATLAB ile ilgili gerçek bir deneyimim olmadığında, tüm farklı türdeki parantezler, onları ne zaman kullanacağım, vb. Bu kadar basit bir noob sorusunu cevapladığınız için teşekkür ederiz. –

+1

Matlab'da oldukça tecrübem var ve özellikle kaşlı ayraçlarla karıştırılmam gerekiyor. Bu yüzden bu yüzden cesaretini kırmayın :-) –

+2

@DavidHeffernan İşte mini öğretici: köşeli parantezler [] 'bir diziye birleştirme, fonksiyon çağrıları ve erişim elemanları için köşeli parantezler'() 've küme parantezleri } 'elemanların * içeriğine * erişmek için (çoğunlukla hücre dizileriyle ilgili) ve bir hücre dizisine birleştirmek için. –

2

şeyler karıştırmayın, ama bana başka sözdizimi izin vermemek:

[arr{[i,j]}] = arr{[j,i]}; 

veya

[arr{i},arr{j}] = arr{[j,i]}; 
burada fikir

curly- ile comma-separated lists kullanmak diş tellerini indeksleme. Hücre-diziden unsurları ayıklar ve döndürme türü belirtilen hücrede depolanan odur -Dizin {} iken

(zaman, hücre diziler ile çalışırken, () -Dizin size sliced hücre dizisi verir unutmayın dizin skaler değildir, MATLAB her hücre içeriğini tek tek virgülle ayrılmış bir liste olarak döndürür).

+0

şahsen ben arr ([i j]) = arr ([j i]) 'yolunu @LuisMendo gösterdi .. – Amro

+0

İyi nokta, bu da bahsetmeye değer bir alternatif –

İlgili konular