Dizi dilimleme - Array slicing

İçinde bilgisayar Programlama, dizi dilimleme bir öğe alt kümesini bir dizi ve onları başka bir dizi olarak, muhtemelen farklı bir boyut orijinalden.

Dizi dilimlemenin yaygın örnekleri, bir alt dizeyi bir dizi karakterlerin "ellh "içinde"ello ", iki boyutlu bir diziden bir satır veya sütun çıkarmak veya bir vektör bir matris.

Bağlı olarak Programlama dili ardışık olmayan öğelerden bir dizi dilimi yapılabilir. Ayrıca dile bağlı olarak, yeni dizinin öğeleri de olabilir takma ad (yani hafızayı orijinal dizininkilerle paylaşın).

Detaylar

"Tek boyutlu" (tek dizinli) diziler - vektörler, dizi, dizeler vb. - için en yaygın dilimleme işlemi, sıfır veya daha fazla ardışık elemanın çıkarılmasıdır. Böylece, (2, 5, 7, 3, 8, 6, 4, 1) öğeler içeren bir vektörümüz varsa ve 3. öğeden 6. öğeye bir dizi dilimi oluşturmak istiyorsak, (7, 3, 8, 6). İçinde Programlama dilleri 0 tabanlı bir dizinleme şeması kullanan, dilim, dizin 2 -e 5.

Herhangi bir dizinin aralığını tek bir değere düşürmek, bu dizini etkili bir şekilde ortadan kaldırır. Bu özellik, örneğin, tek boyutlu dilimleri (vektörler: 3B, satırlar, sütunlar ve tüpler) çıkarmak için kullanılabilir.[1]) veya üç boyutlu bir diziden iki boyutlu dilimler (dikdörtgen matrisler). Bununla birlikte, aralık çalışma zamanında belirtilebildiğinden, tür denetimli diller, önemsiz dizinleri gerçekten ortadan kaldırmak için açık (derleme zamanı) bir gösterim gerektirebilir.

Genel dizi dilimleme, her diziye bir uyuşturucu vektör veya tanımlayıcı - ilk dizi öğesinin adresini ve ardından her bir dizinin aralığını ve dizin oluşturma formülündeki karşılık gelen katsayıyı içeren bir kayıt. Bu teknik aynı zamanda anında diziye izin verir aktarım, indeks ters çevirme, alt örnekleme, vb. Gibi diller için C, indislerin her zaman sıfırdan başladığı yerde, bir dizinin dope vektörü ile d endekslerde en az 1 + 2 bulunurd parametreleri. Endeksler için keyfi alt sınırlara izin veren diller için, örneğin Pascal uyuşturucu vektörünün 1 + 3'e ihtiyacı vard girdileri.

Dizi soyutlaması gerçek negatif indisleri desteklemiyorsa (örneğin, diziler gibi) Ada ve Pascal do), daha sonra belirli bir boyut için dilimin sınırları için negatif indeksler bazen o boyuttaki dizinin sonundan bir uzaklığı belirtmek için kullanılır. 1 tabanlı şemalarda, -1 genellikle ikinci ila son öğeyi belirtirken, 0 tabanlı bir sistemde, en son öğe anlamına gelir.

Tarih

Dilimleme kavramı, icat edilmeden önce bile kesinlikle biliniyordu. derleyiciler. Dil özelliği olarak dilimleme muhtemelen FORTRAN (1957), tasarımdan ziyade var olmayan tip ve aralık kontrolünün bir sonucu olarak. Konsepte, aynı zamanda ön raporda da değinildi. IAL (ALGOL 58) sözdiziminin, bir dizi elemanının (veya bu konuda bir prosedür çağrısının) bir veya daha fazla indeksinin, gerçek bir parametre olarak kullanıldığında çıkarılmasına izin vermesi.

Kenneth Iverson 's APL (1957), dilin ifade gücüne ve popülerliğine çok katkıda bulunan çok esnek çok boyutlu dizi dilimlemeye sahipti.

ALGOL 68 (1968) kapsamlı çok boyutlu dizi dilimleme ve kırpma özelliklerini tanıttı.

Dizi dilimleme tesisleri, aşağıdakiler gibi birkaç modern dilde birleştirilmiştir: Ada 2005, Boo, Kobra, D, Fortran 90, Git, Pas, paslanma, Matlab, Perl, Python, Argo, Windows PowerShell ve matematiksel / istatistiksel diller GNU Oktav, S ve R.

Çeşitli programlama dillerinde dilimleme zaman çizelgesi

1966: Fortran 66

Fortran 66 programcıları, matrisleri satıra göre dilimlemenin avantajını yalnızca o satırı bir satıra geçirirken altyordam:

 ALTROUTİN BASKI V(VEC, UZUNLUK)   GERÇEK VEC(*)   YAZDIR *, (VEC(ben), ben = 1, UZUNLUK) SON PROGRAM ANA   PARAMETRE(UZUNLUK = 3)   GERÇEK MATRİS(UZUNLUK, UZUNLUK)   VERİ MATRİS/1, 1, 1, 2, 4, 8, 3, 9, 27/   ÇAĞRI YAZDIR V(MATRİS(1, 2), UZUNLUK) SON

Sonuç:

   2.000000       4.000000       8.000000

Olmadığını unutmayın uyuşturucu vektör FORTRAN 66'da bu nedenle dilimin uzunluğu da bir argüman olarak - veya başka bir yolla - ALTROUTİN. 1970'ler Pascal ve C benzer kısıtlamalar vardı.

1968: Algol 68

Algol68 final raporu, dilimlemenin erken bir örneğini içerir, dilimler şu biçimde belirtilir:

[alt sınır: üst sınır] ¢ genişletilmiş karakter setine sahip bilgisayarlar için ¢

veya:

(ALT SINIRLI ... ÜST SINIRLI) # SADECE 6 BİT KARAKTERLİ BİLGİSAYARLAR İÇİN. #

Her iki sınır da kapsayıcıdır ve ihmal edilebilir, bu durumda varsayılan dizi sınırlarını kullanırlar. Ne adım tesisi ne de çapraz dilim takma adları revize edilmiş raporun bir parçası değildir.

Örnekler:

[3, 3] gerçek a: = ((1, 1, 1), (2, 4, 8), (3, 9, 27)); # değişken matrisin beyanı #[,] gerçek c = ((1, 1, 1), (2, 4, 8), (3, 9, 27)); # sabit matris, boyut ima edilir #
ref [] gerçek satır: = a [2,]; # takma ad /ref bir satır dilimine #ref [] gerçek col2 = a [, 2]; # kalıcı takma ad /ref ikinci sütuna #
baskı ((a [:, 2], yeni satır)); # ikinci sütun dilimi #baskı ((a [1⌈a,:], satırsonu)); # son satır dilimi #baskı ((a [:, 2⌈a], satırsonu)); # son sütun dilimi #baskı ((a [: 2,: 2], satırsonu)); # önde gelen 2'ye 2 alt matris "dilim" #
+1.000010+0 +4.000010+0 +9.000010+0+3.000010+0 +9.000010+0 +2.700010+1+1.000010+0 +8.000010+0 +2.700010+1+1.000010+0 +1.000010+0 +2.000010+0 +4.000010+0

1970'ler: MATLAB

> Bir = yuvarlak(rand(3, 4, 5)*10) % 3x4x5 üç boyutlu veya kübik dizi> Bir(:, :, 3) Birinci ve ikinci boyutlar boyunca% 3x4 iki boyutlu dizians =  8  3  5  7  8  9  1  4  4  4  2  5> Bir(:, 2:3, 3) Birinci ve ikinci boyutlarda% 3x2 iki boyutlu dizians =  3 5  9 1  4 2> Bir(2:son, :, 3) 'End' anahtar sözcüğünü kullanan% 2x4 iki boyutlu dizi; GNU Octave 3.2.4 ile çalışırans =   6    1    4    6  10    1    3    1> Bir(1, :, 3) İkinci boyut boyunca% tek boyutlu dizians =  8  3  5  7> Bir(1, 2, 3) % tek değerans = 3

1976: S /R

Diziler S ve GNU R her zaman bir tabanlıdır, bu nedenle yeni bir dilimin endeksleri bir önceki endekslerden bağımsız olarak her boyut için. Uzunluğu ile boyutlar bir bırakılacaktır (düşme = YANLIŞ olmadığı sürece). Boyut adları (varsa) korunacaktır.

> Bir <- dizi(1:60, sönük = c(3, 4, 5)) # 3x4x5 üç boyutlu veya kübik dizi> A [, , 3] Birinci ve ikinci boyutlar boyunca # 3x4 iki boyutlu dizi     [, 1] [, 2] [, 3] [, 4][1,]   25   28   31   34[2,]   26   29   32   35[3,]   27   30   33   36> A [, 2:3, 3, düşürmek = YANLIŞ] # 3x2x1 kübik dizi alt kümesi (korunan boyutlar), , 1     [, 1] [, 2][1,]   28   31[2,]   29   32[3,]   30   33> A [, 2, 3]  # ilk boyut boyunca tek boyutlu dizi[1] 28 29 30> A [1, 2, 3] # tek değer[1] 28

1977: Fortran 77

Fortran 77 standardı, dilimleme ve sıralamak Teller:

PROGRAM ANA  YAZDIR *, 'ABCDE'(2:4)SON

Üretir:

BCD

Bu tür dizeler geçilebilir referans başka bir alt yordama, uzunluk da bir tür alt yordama şeffaf bir şekilde aktarılırdı. kısa uyuşturucu vektör.

ALTROUTİN BASKI S(STR)  KARAKTER *(*)STR  YAZDIR *, STRSONPROGRAM ANA  ÇAĞRI YAZDIR S('ABCDE'(2:4))SON

Yine üretir:

BCD

1979: Sinclair_BASIC ZX80 / 81 / Spektrum

ZX80 / 81 / Spectrum'un standart ROM'u, BASIC'i dilimleme ve sıralamak Teller:

Gerekli dizi dilimine işaret eden komut bölümünde (x'den y'ye), tüm zincirlenmiş dizi hücrelerinin (FROM x TO end) veya (baştan y'ye) kullanılması anlamını vererek, x ve y değeri çıkarılabilir. Çok boyutlu dizilerle, dilimleme yalnızca son seviye boyutuyla mümkündür.

10İZİN VERMEKa $="ABCDE"(2-e4)20YAZDIRa $

Üretir:

BCD
10İZİN VERMEKa $="ABCDE"20İZİN VERMEKb $=a $(4KİME)+a $(2KİME3)+a $(1)30YAZDIRb $

Üretir:

DEBCA

1983: Ada 83 ve yukarıda

Ada 83, tüm dizi türleri için dilimleri destekler. Sevmek Fortran 77 bu tür diziler geçilebilir referans başka bir alt yordama, uzunluk da bir tür alt yordama şeffaf bir şekilde aktarılırdı. kısa uyuşturucu vektör.

ile Text_IO; prosedür Ana dır-dir   Metin : Dize := "ABCDE";başla   Text_IO.Put_Line (Metin (2 .. 4));son Ana;

Üretir:

BCD

Not: Ada'da endeksler n tabanlı olduğundan terim Metin (2 .. 4) temel indeksi 2 olan bir Dizi ile sonuçlanır.

Tanımı Text_IO.Put_Line dır-dir:

paket Ada.Text_IO dır-dir      prosedür Put_Line(Öğe : içinde  Dize);

Tanımı Dize dır-dir:

paket Standart dır-dir   alt tür Pozitif dır-dir Tamsayı Aralık 1 .. Tamsayı'Son;   tip Dize dır-dir dizi(Pozitif Aralık <>) nın-nin Karakter;   Pragma Paketi(Dize);

Ada, aşağıdaki gibi gerçek negatif endeksleri destekler type History_Data_Array, History_Data dizisidir (-6000 .. 2010); negatif endekslere özel bir anlam vermez. Yukarıdaki örnekte terim Some_Tistory_Data (-30 .. 30) dilimlemek History_Data 31'den M.Ö 30'a kadar AD (sıfır yılı olmadığından, 0 yılı aslında 1'i ifade eder M.Ö ).

1987: Perl

Eğer sahipsek

@a = (2, 5, 7, 3, 8, 6, 4);

yukarıdaki gibi, ilk 3 öğe, ortadaki 3 öğe ve son 3 öğe şöyle olacaktır:

@a[0..2];   # (2, 5, 7)@a[2..4];   # (7, 3, 8)@a[-3..-1]; # (8, 6, 4)

Perl, negatif liste dizinlerini destekler. -1 dizini son elemandır, -2 sondan bir önceki elemandır, vb. Ayrıca Perl, ifadelere göre dilimlemeyi destekler, örneğin:

@a[ 3.. $ # a ];   # 4. eleman sonuna kadar (3, 8, 6, 4)@a[ grep { !($_ % 3) } (0...$ # a) ];    # 1., 4. ve 7. eleman (2,3,4)@a[ grep { !(($_+1) % 3) } (0..$ # a) ]; # her 3. element (7,6)

1991: Python

Aşağıdaki listeye sahipseniz:

>>> Nums = [1, 3, 5, 7, 8, 13, 20]

Daha sonra, öğe alımına benzer bir gösterim kullanarak dilimleme yapmak mümkündür:

>>> Nums[3]   # dilimleme yok7>>> Nums[:3]  0 dizininden (dahil) dizin 3'e (hariç) kadar #[1, 3, 5]>>> Nums[1:5][3, 5, 7, 8]>>> Nums[-3:][8, 13, 20]

Python'un negatif liste indekslerine izin verdiğini unutmayın. -1 indisi son öğeyi, -2 sondan bir önceki öğeyi temsil eder, vb. Python ayrıca fazladan iki nokta üst üste ve bir değer ekleyerek bir adım özelliğine izin verir. Örneğin:

>>> Nums[3:][7, 8, 13, 20]>>> Nums[3::] # == nums [3:][7, 8, 13, 20]>>> Nums[::3] # 0 dizininden başlayıp her üçüncü öğeyi alıyor[1, 7, 20]>>> Nums[1:5:2] # 1'den dizin 5'e kadar ve her ikinci öğeyi alıyorum[3, 7]

Adım sözdizimi (nums [1: 5: 2]), Python "matrix-SIG" (özel ilgi grubu) içinde bilimsel kullanıcılar tarafından öne sürülen talepler sonucunda 1990'ların ikinci yarısında tanıtıldı.[2]

Dilim semantiği potansiyel olarak nesne başına farklılık gösterir; yeni anlambilim ne zaman tanıtılabilir? operatör aşırı yükleme indeksleme operatörü. Python standart listeleri ile ( dinamik diziler ), her dilim bir kopyadır. Dilimleri Dizi diziler, aksine, aynı temel tampona ilişkin görünümlerdir.

1992: Fortran 90 ve yukarıda

Fortran 90'da dilimler formda belirtilir

alt sınır:üst sınır[:uzun adım]

Her iki sınır da kapsayıcıdır ve ihmal edilebilir, bu durumda varsayılan dizi sınırlarını kullanırlar. Adım varsayılan olarak 1'dir. Örnek:

gerçek, boyut(m, n):: a  ! bir matrisin beyanı  Yazdır *, a(:, 2) ! ikinci sütunYazdır *, a(m, :) ! son sıraYazdır *, a(:10, :10) ! önde gelen 10'a 10 alt matris

1994: Analytica

Analytica'daki bir dizi değerinin her boyutu, bir Dizin değişkeni ile tanımlanır. Dilimleme veya abonelik oluştururken, sözdizimi, üzerinde dilimlediğiniz veya abone olduğunuz boyutları adlandırarak belirler. Gibi:

Dizin I: = 1..5 {Sayısal Dizinin Tanımı} Dizin J: = ['A', 'B', 'C'] {Metin değerli bir Dizinin Tanımı} Değişken X: = Dizi (I, J , [[10, 20, 30], [1, 2, 3], ....]) {2D değerin tanımı} X [I = 1, J = 'B'] -> 20 {Elde edilecek alt simge tek bir değer} X [I = 1] -> Dizi (J, [10, 20, 30]) {1B dizisini dilimleyin. } X [J = 2] -> Dizi (I, [20, 2, ....]) {1B dizisini diğer boyut üzerinden dilimleyin. } X [I = 1..3] {J üzerindeki tüm öğelerle I üzerinden ilk dört öğeyi dilimleyin}

Dizinleri dilimleme ve abonelikte adlandırmak, sabit bir parametre dizisine dayanmak yerine işlev çağrılarındaki parametreleri adlandırmaya benzer. Dilimlemede dizinleri adlandırmanın bir avantajı, programcının çok boyutlu bir dizide Dizinlerin sırasını hatırlamak zorunda olmamasıdır. Daha derin bir avantaj, X boyutlarının sayısı değiştiğinde ifadelerin yeniden yazmaya gerek kalmadan otomatik ve güvenli bir şekilde genelleştirilmesidir.

1998: Argo

Dizi dilimleme 1.0 sürümünde tanıtıldı. Önceki sürümler bu özelliği desteklemiyordu.

A'nın aşağıdaki gibi 1 boyutlu bir dizi olduğunu varsayalım

    A = [1:50]; % A = [1, 2, 3, ... 49, 50]

Daha sonra A'nın ilk 5 elemanından oluşan bir B dizisi kullanılarak oluşturulabilir.

    B = A [[: 4]];

Benzer şekilde, B, A'nın son 5 elemanından oluşan bir diziye şu şekilde atanabilir:

    B = A [[- 5:]];

Diğer 1 boyutlu dilimleme örnekleri şunları içerir:

    A [-1]% AA'nın son elemanı [*]% AA'nın tüm elemanları [[:: 2]]% AA'nın tüm çift elemanları [[1 :: 2]]% AA'nın tüm tekli elemanları [[- 1 :: - 2]]% Ters sırada A [[[0: 3], [10:14]]] Elemanlar 0-3 ve 10-14%

Daha yüksek boyutlu dizilerin dilimlenmesi benzer şekilde çalışır:

    A [-1, *]% AA [[1: 5], [2: 7]]% 2d dizisinin 1-5 satırları ve 2-7 sütunlarını kullanan son satırı A [[5: 1: -1], [2: 7]]% Satırların tersine çevrilmesi dışında yukarıdakiyle aynı

Dizi indeksleri aynı zamanda tamsayı dizileri de olabilir. Örneğin, varsayalım ki I = [0: 9] 10 tam sayılık bir dizidir. SonraA [I] ilk 10 elementin dizisine eşdeğerdir Bir. Bunun pratik bir örneği, aşağıdaki gibi bir sıralama işlemidir:

    I = dizi_sırası (A); % B = A [I] sıralama indekslerinin bir listesini elde edin; % B, A C = A [dizi_sırası (A)] 'nın sıralı sürümüdür; % Yukarıdaki ile aynı, ancak daha özlü.

1999: D

Diziyi düşünün:

int[] a = [2, 5, 7, 3, 8, 6, 4, 1];

Ondan bir dilim alın:

int[] b = a[2 .. 5];

ve içeriği b olacak [7, 3, 8]. Dilimin ilk dizini kapsayıcıdır, ikincisi hariçtir.

Oto c = a[$ - 4 .. $ - 2];

dinamik dizinin c şimdi içerir [8, 6] çünkü [] içinde $ sembolü dizinin uzunluğunu ifade eder.

D dizi dilimleri orijinal dizinin diğer adıdır, bu nedenle:

b[2] = 10;

anlamına gelir a şimdi içeriğe sahip [2, 5, 7, 3, 10, 6, 4, 1]. Yalnızca bir takma ad yerine dizi verilerinin bir kopyasını oluşturmak için şunları yapın:

Oto b = a[2 .. 5].çift;

Python'dan farklı olarak, D dilim sınırları doymaz, bu nedenle bu Python koduna eşdeğer kod D'de bir hatadır:

>>> d = [10, 20, 30]>>> d[1 : 5][20, 30]

2004: Süper çarpıştırıcı

Programlama dili Süper çarpıştırıcı bazı kavramları uygular J /APL. Dilimleme aşağıdaki gibi görünür:

a = [3, 1, 5, 7]           // a değişkenine bir dizi atayına[0..1]                    // a'nın ilk iki öğesini döndüra[..1]                     // a'nın ilk iki öğesini döndürür: sıfır atlanabilira[2..]                     // 3. elemanı sonuncuya kadar döndüra[[0, 3]]                  // a'nın birinci ve dördüncü elemanını döndüra[[0, 3]] = [100, 200]     // a'nın birinci ve dördüncü elemanını değiştirina[2..] = [100, 200]        // a'nın son iki elemanını değiştir// a değişkenine çok boyutlu bir dizi atayına = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]; a.dilim(2, 3);             // koordinatları 2 ve 3 olan bir dilim al (13 döndürür)a.dilim(sıfır, 3);           // ortogonal bir dilim al ([3, 8, 13, 18] döndürür)

2005: balık

Diziler balık her zaman bir tabanlıdır, bu nedenle yeni bir dilimin endeksleri birönceki endekslerden bağımsız olarak.

> Ayarlamak Bir (sıra 3 2 11)       # $ A, 3, 5, 7, 9, 11 değerlerine sahip bir dizidir > Eko A $[(seq 2)]         # $ A'nın ilk iki öğesini yazdırın 3 5 > Ayarlamak B A $[1 2]            # $ B, $ A'nın birinci ve ikinci öğesini içerir, yani 3, 5 > Ayarlamak -e A[$ B]; Eko A $    # $ A'nın üçüncü ve beşinci unsurlarını sil, $ A yazdır3 5 9

2006: Kobra

Cobra, Python tarzı dilimlemeyi destekler. Bir listeniz varsa

Nums = [1, 3, 5, 7, 8, 13, 20]

, sonra ilk 3 öğe, ortadaki 3 öğe ve son 3 öğe şöyle olur:

Nums[:3]   # eşittir [1, 3, 5]Nums[2:5]  # eşittir [5, 7, 8]Nums[-3:]  # eşittir [8, 13, 20]

Cobra, 'döngüler için sayısal' için dilimleme stili sözdizimini de destekler:

için ben içinde 2 : 5    Yazdır ben# baskı 2, 3, 4için j içinde 3    Yazdır j# 0, 1, 2 yazdırır

2006: Windows PowerShell

Diziler, PowerShell'de sıfır tabanlıdır ve virgül operatörü kullanılarak tanımlanabilir:

PS>$ a = 2, 5, 7, 3, 8, 6, 4, 1PS># $ A'nın ilk iki öğesini yazdırın:PS>"$($ a[0, 1])"2 5PS># Aralık operatörünü kullanarak bir dilim alın:PS>"$($ a[2..5])"7 3 8 6PS># Son 3 öğeyi alın:PS>"$($ a[-3..-1])"6 4 1PS># Dizinin içeriğini ters sırada döndür:PS>"$($ a[($ a.Uzunluk - 1)..0])" # Uzunluk, System.Object [] özelliğidir1 4 6 8 3 7 5 2

2009: Git

Go, dilimleme için Python tarzı sözdizimini destekler (negatif indeksler desteklenmez). Diziler ve dilimler dilimlenebilir. Bir dilim varsa

Nums := []int{1, 3, 5, 7, 8, 13, 20}

daha sonra ilk 3 öğe, ortadaki 3 öğe, son 3 öğe ve tüm dilimin bir kopyası şöyle olur:

Nums[:3]  // eşittir [] int {1, 3, 5}Nums[2:5] // eşittir [] int {5, 7, 8}Nums[4:]  // eşittir [] int {8, 13, 20}Nums[:]   // eşittir [] int {1, 3, 5, 7, 8, 13, 20}

Go'daki dilimler başvuru türleridir; bu, farklı dilimlerin aynı temel diziye başvurabileceği anlamına gelir.

2010: Cilk Plus

Cilk Plus, C ve C ++ için bir uzantı olarak dizi dilimleme için sözdizimini destekler.

dizi_base [alt sınır:uzunluk[:uzun adım]]*

Cilk Plus dilimleme aşağıdaki gibi görünür:

Bir[:]     // A vektörünün tamamıB[2:6]   // B vektörünün 2-7 arası elemanlarC[:][5]  // C matrisinin 5. sütunuD[0:3:2] // D vektörünün 0, 2, 4 öğeleri

Cilk Plus'ın dizi dilimlemesi, Fortran'lardan iki yönden farklıdır:

  • ikinci parametre, standart C kitaplıkları ile tutarlı olması için üst sınır yerine uzunluktur (dilimdeki eleman sayısı);
  • dilimleme hiçbir zaman geçici değildir ve bu nedenle hiçbir zaman bellek ayırmaya ihtiyaç duymaz. Atamaların ya örtüşmeyen ya da tamamen örtüşen olması gerekir, aksi takdirde sonuç tanımsız olur.

2012: Julia

Julia dizi dilimleme Matlab'ınki gibidir, ancak köşeli parantez kullanır. Misal:

Julia> x = rand(4, 3)4x3 Dizi {Float64,2}: 0.323877  0.186253  0.600605 0.404664  0.894781  0.0955007 0.223562  0.18859   0.120011 0.149316  0.779823  0.0690126Julia> x[:, 2]                # ikinci sütunu alın.4 öğeli Dizi {Float64,1}: 0.186253 0.894781 0.18859 0.779823Julia> x[1, :]                # ilk satırı alın.1x3 Dizi {Float64,2}: 0.323877  0.186253  0.600605Julia> x[1:2,2:3]             # 1,2 ve 2,3 sütunlarını kapsayan alt matrisi alın2x2 Dizi {Float64,2}: 0.186253  0.600605 0.894781  0.0955007

Ayrıca bakınız

Referanslar

  1. ^ Zhang, Zemin; Aeron, Shuchin (2017-03-15). "T-SVD Kullanarak Tam Tensör Tamamlama". Sinyal İşlemede IEEE İşlemleri. Elektrik ve Elektronik Mühendisleri Enstitüsü (IEEE). 65 (6): 1511–1526. doi:10.1109 / tsp.2016.2639466. ISSN  1053-587X.
  2. ^ Millman, K. Jarrod; Aivazis, Michael (2011). "Bilim Adamları ve Mühendisler için Python". Bilim ve Mühendislikte Hesaplama. 13 (2): 9–12.