Ne tür bir Python programcısı NumPy'yi anlamaz? | CSDN blog seçimi

Yazar | Tianyuan Prodigal Son

Baş Editör | Guo Rui

Üretildi | CSDN Blogu

Yaklaşık yedi ya da sekiz yıl önce, pyOpenGL'yi Dünya'nın manyetopozunun 3B modelini çizmek için kullandım. Bu kod hala bir bilimsel araştırma kurumunda çalışıyor. Ondan önce, her şeye kadir görünen bir Python programcısı olduğumu hep hissettim. Ancak manyetopoz modelinin görüntü efekti beni hayal kırıklığına uğratıyor - bu modelin yalnızca yüz binlerce köşesi olmasına rağmen, sürükleme ve yakınlaştırma çok sıkıştı.

Sonunda, modelin kalitesini ve yanıt hızını hesaba katarak köşe sayısını yaklaşık 20.000'e düşürdüm ve görevi zar zor yerine getirdim. O andan itibaren, Python'un performansından şüphe etmeye başladım ve hatta Python'un hala benim seçim aracım olup olmadığını merak ettim.

Neyse ki bu eser NumPy ile karşılaştım. NumPy, Python bilimsel hesaplama için temel yazılım paketidir.Çok boyutlu dizi nesneleri, çeşitli türetilmiş nesneler (maskelenmiş diziler, matrisler, vb.), Hızlı çalışan diziler için işlevler ve API'ler sağlar.Matematik, mantık, dizi şekli dönüştürme, sıralama, Seçim, G / Ç, ayrık Fourier dönüşümü, temel doğrusal cebir, temel istatistiksel işlemler, stokastik simülasyon vb.

NumPy'yi öğrendikten sonra, verileri depolamak için ndarray (NumPy dizisi) yerine list (Python dizisi) kullanılması nedeniyle magnetopause'un orijinal 3D modelinin yavaş olduğunu anlamak istedim. NumPy ile Python programcılarının C dilinin hızıyla karşılaştırılabilir kod yazmaları mümkündür. NumPy'ye aşina, PyOpenGL / PyOpenCV / Pandas / Matplotlib ve diğer veri işleme ve görselleştirme modüllerini kullanmayı öğrenebilirsiniz.

Aslında NumPy'nin veri organizasyon yapısı, özellikle diziler (numpy.ndarray), neredeyse tüm veri işleme ve görselleştirme modüllerinin standart veri yapısı haline geldi (bu Python'a benziyor, neredeyse makine öğrenimi alanında tercih edilen araç dili haline geldi) . Giderek daha fazla Python tabanlı bilim ve matematik paketi NumPy dizilerini kullanır.Bu araçlar genellikle Python'un yerel dizilerini parametre olarak desteklese de, işlemeden önce girdi dizilerini NumPy dizilerine dönüştürmeye devam edecekler ve ayrıca Genellikle çıktı bir NumPy dizisidir. Python'da daire Burada NumPy'nin önemi ve evrenselliği her geçen gün artmaktadır. Diğer bir deyişle, günümüzün bilim / matematik Python tabanlı araçlarını (bilimsel hesaplama araçlarının çoğu) verimli bir şekilde kullanmak için, yalnızca Python'un yerel dizi türlerini nasıl kullanacağınızı bilmeniz yeterli değildir, ayrıca numpy dizilerini nasıl kullanacağınızı da bilmeniz gerekir.

Yapay zeka ve makine öğreniminin hakim olduğu bu ekran çağında NumPy'yi anlamıyorsanız, lütfen bir Python programcısı olduğunuzu söylemeyin.

Liste VS ndarray

Numpy'nin çekirdeği, python'a özgü aynı veri türünün n boyutlu dizisini (python dizisi) kapsülleyen ndarray nesnesidir (numpy dizisi). Numpy dizileri ve python dizileri arasında birkaç önemli fark vardır:

  • Numpy dizisi oluşturulduktan sonra, elemanlarının sayısı değiştirilemez. Ndarray öğelerini ekleme ve silme işlemi, yeni bir dizi oluşturmak ve orijinal diziyi silmek anlamına gelir. Python dizisinin öğeleri dinamik olarak artırılabilir veya azaltılabilir.

  • Numpy dizisindeki elemanların hepsinin aynı veri tipine sahip olması ve dolayısıyla hafızada aynı boyuta sahip olması gerekir. Python dizileri için böyle bir gereksinim yoktur.

  • Numpy dizisi yöntemleri, çok sayıda matematiksel işlemi ve karmaşık işlemi kapsar ve birçok yöntem, en dıştaki numpy ad alanında karşılık gelen eşleme işlevlerine sahiptir. Python dizileriyle karşılaştırıldığında, numpy dizileri daha güçlü işlevlere, daha yüksek yürütme verimliliğine ve daha kısa kodlara sahiptir.

Bununla birlikte, yukarıdaki farklılıklar ndarray'in avantajlarını gerçekten yansıtmamaktadır ndarray'in özü, numpy'nin iki ana özelliğinde yatmaktadır: vektörleştirme ve yayınlama. Vektörizasyon, kodda açık döngüler, indeksler vb. Bulunmadığından anlaşılabilir ve yayın, her bir öğe üzerinde örtük olarak işliyor olarak anlaşılabilir. Vektorizasyon ve yayın anlaşılması biraz soyut, açıklamak için bir kestane alalım.

Örnek: a ve b, eşit uzunlukta iki tamsayı dizisidir. A ve b'nin karşılık gelen elemanlarının çarpımı ile oluşturulan diziyi bulun.

1. python dizisi ile gerçekleştirin:

c = liste aralıktaki i için (len (a)): c. uygulama son (a * b )

2. Uyuşuk dizi ile anlayın:

c = a * b

Bu kestane vektörleştirme ve yayınlamanın güçlü gücünü bünyesinde barındırıyor mu? Lütfen dikkatli bir şekilde deneyimleyin!

sonuç olarak:

  • Vektörize edilmiş kod daha kısa ve okunması daha kolaydır;

  • Daha az kod satırı genellikle daha az hata anlamına gelir;

  • Kod, standart matematiksel gösterime daha yakındır;

  • Vektörize edilmiş kod daha pitoniktir.

tip VE şekil

Zi şöyle dedi: Bir nesne ararken, önce karakteri anlayın ve nesneyi öğrenmek için önce özellikleri anlayın. Ndarray nesnesinin birçok özelliği vardır, ayrıntılar için aşağıdaki tabloya bakın.

Aşağıdaki üç nedene dayanarak, dtype ve şeklin ndarray'in en önemli iki özelliği olduğuna ve diğer özelliklerin neredeyse ihmal edilebilir olduğuna inanıyorum.

  • Yaptığımız neredeyse tüm çukurlar dtype ile kazıldı;

  • Bizim kafa karışıklığımız neredeyse şekil beklediğimizden farklı olduğu için;

  • İşimizin çoğu şekil değiştiriyor.

ndarray.astype öğe türünü değiştirebilir ve ndarray.reshape dizinin yapısını yeniden tanımlayabilir.Bu iki yöntemin önemi, karşılık gelen özniteliklerle aynıdır. Odaya girseniz bile bu iki özelliği ve karşılık gelen iki yöntemi unutmayın. Numpy tarafından desteklenen öğe türleri hakkında bilgi edinmek için, lütfen "Matematiksel Modelleme Üç Silahşör MSN" (https://blog.csdn.net/xufive/article/details/52449255) tıklayın.

Dizi oluştur

(1) Basit bir dizi oluşturun

numpy.array (nesne, dtype = Yok, kopya = Doğru, sıra = Yok, subok = Yanlış, ndmin = 0) numpy.empty (şekil, dtype = float, sıra = 'C') numpy.zeros (şekil, dtype = float, sıra = 'C') numpy.ones (şekil, dtype = float, sıra = 'C') numpy.eye (N, M = Yok, k = 0, dtype = float, order = 'C')

Uygulama örneği:

> > > numpy'yi np olarak içe aktar > > > > np.array () dizi() > > > np.empty ((2, 3)) dizi() > > > np.zeros (2) dizi() > > > np.ones (2) dizi() > > > np.eye (3) dizi()

(2) Rastgele bir dizi oluşturun

numpy.random.random (boyut = Yok) numpy.random.randint (düşük, yüksek = Yok, boyut = Yok, dtype = 'l')

Uygulama örneği:

> > > np.random.random (3) dizi() > > > np.random.randint (2, boyut = 10) dizi() > > > np.random.randint (5, boyut = (2, 4)) dizi() > > > np.random.randint (3,10, (2,4)) dizi()

(3) Sayısal aralıkta bir dizi oluşturun

numpy.arange (start, stop, step, dtype = Yok) numpy.linspace (start, stop, num = 50, endpoint = True, retstep = False, dtype = Yok) numpy.logspace (start, stop, num = 50, endpoint = True, base = 10.0, dtype = None)

Uygulama örneği:

> > > np.arange (5) dizi() > > > np.arange (0,5,2) dizi() > > > np.linspace (0, 5, 5) dizi() > > > np.linspace (0, 5, 5, uç nokta = Yanlış) dizi() > > > np.logspace (1,3,3) dizi () > > > np.logspace (1, 3, 3, uç nokta = Yanlış) dizi ()

(4) Mevcut bir diziden bir dizi oluşturun

numpy.asarray (a, dtype = Yok, sıra = Yok) numpy.empty_like (a, dtype = None, order = 'K', subok = True) numpy.zeros_like (a, dtype = None, order = 'K', subok = True) numpy.ones_like (a, dtype = None, order = 'K', subok = True)

Uygulama örneği:

> > > np.asarray () dizi() > > > np.empty_like (np.asarray ()) dizi() > > > np.zeros_like (np.asarray ()) dizi() > > > np.ones_like (np.asarray ()) dizi()

(5) Karmaşık bir dizi oluşturun

Yinelenen dizi döşemesi

> > > a = np.arange (3) > > > a dizi() > > > np.tile (a, 2) dizi() > > > np.tile (a, (2,3)) dizi()

Eleman tekrarını tekrarla

> > > a = np.arange (3) > > > a dizi() > > > a. tekrar (2) dizi()

Tek boyutlu dizi ızgarası: ağ ızgarası

> > > lon = np.arange ( 30 , 120, 10) > > > lon dizi (< 30 , 40, 50, 60, 70, 80, 90, 100, 110>) > > > lat = np.arange (10, 50, 10) > > > enlem dizi() > > > lons, lats = np.meshgrid (lon, lat) > > > lons dizi(, < 30 , 40, 50, 60, 70, 80, 90, 100, 110>, < 30 , 40, 50, 60, 70, 80, 90, 100, 110>, < 30 , 40, 50, 60, 70, 80, 90, 100, 110 >>) > > > lats dizi()

Belirtilen aralık ve bölme yöntemiyle ağ oluşturma: mgrid

> > > lats, lons = np.mgrid > > > lats dizi() > > > lons dizi(, < 30 , 40, 50, 60, 70, 80, 90, 100, 110>, < 30 , 40, 50, 60, 70, 80, 90, 100, 110>, < 30 , 40, 50, 60, 70, 80, 90, 100, 110 >>) > > > lats, lons = np.mgrid > > > lats dizi() > > > lons dizi(, < 30 ., 40., 50., 60., 70., 80., 90., 100., 110., 120.>, < 30 ., 40., 50., 60., 70., 80., 90., 100., 110., 120.>, < 30 ., 40., 50., 60., 70., 80., 90., 100., 110., 120.>, < 30 ., 40., 50., 60., 70., 80., 90., 100., 110., 120. >>)

Yukarıdaki örnekte hayali sayılar kullanılmıştır. Karmaşık sayılar oluşturma yöntemi aşağıdaki gibidir:

> > > kompleks (2,5) (2 + 5j)

Dizi işlemleri

(1) Dilim ve dizin

Tek boyutlu dizileri indekslemek ve dilimlemek için numpy, python'un listesiyle aynıdır ve daha da esnektir.

a = np.arange (9) > > > a # son öğe 8 > > > a # 2. ila 5. öğeleri döndürür dizi() > > > a # Adım boyutu 3 olan 0 ila 7. öğeleri döndür dizi() > > > a # Diziyi ters sırada döndürür dizi()

İki katlı bir bina olduğunu ve her kattaki odaların 3 sıra ve 4 sütun olduğunu varsayalım, sonra her odadaki kişi sayısını kaydetmek için üç boyutlu bir dizi kullanabiliriz (tabii ki oda alanı gibi başka sayısal bilgiler de olabilir).

> > > a = np.arange (24) .reshape (2,3,4) # 2 katman, 3 satır ve 4 sütun > > > a dizi(, >, >) > > > a # Bu mümkün olsa da yirmi üç > > > a # Ama bu standart kullanımdır yirmi üç > > > a # Satır 1, tüm katların 1. sütunu dizi () > > > a # Birinci kattaki tüm odalar, a veya a'ya eşdeğer dizi(, , >) > > > a # Tüm katlardaki tüm satırların 2 ile 4 arasındaki sütunları dizi(, >, >) > > > a # 2. kattaki her sıradaki son oda dizi()

İpucu: Çok boyutlu bir diziyi dilimleyerek veya indeksleyerek elde edilen sonuç için boyut belirlenmez.

(2) Dizinin yapısını değiştirin

Numpy dizilerinin saklama sırası dizinin boyutlarıyla ilgisizdir, bu nedenle dizinin boyutlarını değiştirmek çok uygun bir işlemdir. Yeniden boyutlandırma dışında, bu tür bir işlem dizinin kendisinin saklama sırasını değiştirmeyecektir.

> > > a = np.array () > > > a.shape # Dizi boyutlarını görüntüle (yirmi üç) > > > a.reshape (3,2) # 3 satırlı ve 2 sütunlu bir dizi döndürür dizi() > > > a.ravel # Tek boyutlu bir dizi döndürür dizi() > > > a.transpose # Satırdan sütuna (matris devrikine benzer) dizi() > > > a.resize ((3,2)) # Yeniden şekillendirmeye benzer, ancak işlem dizisini değiştirir > > > a dizi()

np.rollaxis, eksenlerin sırasını değiştirmek ve yeni bir dizi döndürmek için kullanılır. Kullanım aşağıdaki gibidir:

numpy.rollaxis (a, eksen, başlangıç = 0)

  • a: dizi;

  • eksen: değiştirilecek eksen, diğer eksenlerin göreceli sırası değişmeden kalır;

  • başlangıç: Değiştirilecek eksen bu konuma kaydırılmadan önce varsayılan değer 0'dır.

Uygulama örneği:

> > > a = np.one ((3,4,5,6)) > > > np.rollaxis (a, 3, 1). şekil (3, 6, 4, 5) > > > np.rollaxis (a, 2). şekil (5, 3, 4, 6) > > > np.rollaxis (a, 1, 4). şekil (3, 5, 6, 4)

(3) Dizi birleştirme

uygulama son

Uyuşukluğa yeni başlayan programcılar için en büyük kafa karışıklığı, bunların kullanılamamasıdır. uygulama Son yöntem, diziye öğeler ekler, hatta uygulama Son yöntem eksik. Aslında, uyuşukluk hala uygulama Son yöntem, ancak bu yöntem artık bir numpy dizi yöntemi değil, en dıştaki numpy ad alanına yükseltildi ve bu yöntemin işlevi artık öğeleri eklemek değil, dizileri birleştirmektir.

> > > np. uygulama son(,) dizi() > > > np. uygulama end (,, eksen = 0) dizi() > > > np. uygulama end (np.array (), np.array (), axis = 1) dizi()

sıralamak

birleştir ve uygulama End kullanımı, iki birleştirilmiş nesnenin bir demet olarak yazılması dışında çok benzerdir.

> > > a = np.array () > > > b = np.array () > > > np.concatenate ((a, b), eksen = 0) dizi() > > > np.concatenate ((a, b.T), axis = 1) dizi() > > > np.concatenate ((a, b), axis = Yok) dizi()

yığın

dışında uygulama end and concatenate, dizi birleştirme ayrıca daha doğrudan yatay birleştirme (hstack), dikey birleştirme (vstack), derin birleştirme (dstack) vb. içerir. Benden daha tembel iseniz, sadece yığın kullanın, bu kadar yeter.

> > > a = np.arange (9). tazeleme (3,3) > > > b = np.arange (9,18). tazeleme (3,3) > > > a dizi() > > > b dizi(, , >) > > > np.hstack ((a, b)) # Yatay birleştirme dizi(, , >) > > > np.vstack ((a, b)) # dikey birleştirme dizi(, , , , , >) > > > np.dstack ((a, b)) # derin birleştirme dizi(, >, , , >, , , >>)

Yığın işlevi prototipi yığın (diziler, eksen = 0), lütfen aşağıdaki örnekte eksen kullanımına dikkat edin.

> > > a = np.arange (60). tazeleme (3,4,5) > > > b = np.arange (60). tazeleme (3,4,5) > > > a.shape, b.shape ((3, 4, 5), (3, 4, 5)) > > > np.stack ((a, b), eksen = 0). şekil (2, 3, 4, 5) > > > np.stack ((a, b), axis = 1) .shape (3, 2, 4, 5) > > > np.stack ((a, b), axis = 2) .shape (3, 4, 2, 5) > > > np.stack ((a, b), axis = 3) .shape (3, 4, 5, 2)

(4) Dizi bölme

Bölme, birleştirmenin tersi işlemidir. Kavram aynıdır, ancak küçük bir fark vardır:

> > > a = np.arange (4). tazeleme (2,2) > > > a dizi() > > > x, y = np.hsplit (a, 2) # Yatay olarak böl, listeyi döndür > > > x dizi() > > > y dizi() > > > x, y = np.vsplit (a, 2) # Dikey olarak böl, listeyi döndür > > > x dizi() > > > y dizi() > > > a = np.arange (8). tazeleme (2,2,2) > > > a dizi() > > > x, y = np.dsplit (a, 2) # Derin bölme, dönüş listesi > > > x dizi() > > > y dizi()

(5) Dizi sıralama

Sıralama, uyuşuk dizilerin güçlü noktası değildir, ancak python dizilerini sıralama hızı yalnızca beklenebilir.

numpy.sort

Numpy.sort işlevi, girdi dizisinin sıralı bir kopyasını döndürür.

numpy.sort (a, axis = -1, tür = 'hızlı sıralama', sıra = Yok)
  • a: sıralanacak dizi;

  • eksen: dizinin sıralandığı eksen, değilse, dizi son eksen boyunca genişletilecek ve sıralanacaktır;

  • tür: sıralama yöntemi, varsayılan "hızlı sıralama" (hızlı sıralama), diğer seçenekler "birleştirme sıralaması" (birleştirme sıralaması) ve "yığın sıralaması" (yığın sıralama);

  • sıra: Dizi alanlar içeriyorsa, sıralanacak alandır.

Uygulama örneği:

> > > a = np.array () > > > np.sort (a) dizi() > > > dt = np.dtype () > > > a = np.array (, dtype = dt) > > > a dizi(, dtype =) > > > np.sort (a, sipariş = 'ad') dizi(, dtype =)

numpy.argsort

İşlev, dizi değerinin dizin değerini küçükten büyüğe döndürür.

numpy.argsort (a, axis = -1, tür = 'hızlı sıralama', sıra = Yok)

  • a: sıralanacak dizi;

  • eksen: dizinin sıralandığı eksen, değilse, dizi son eksen boyunca genişletilecek ve sıralanacaktır;

  • tür: sıralama yöntemi, varsayılan "hızlı sıralama" (hızlı sıralama), diğer seçenekler "birleştirme sıralaması" (birleştirme sıralaması) ve "yığın sıralaması" (yığın sıralama);

  • sıra: Dizi alanlar içeriyorsa, sıralanacak alandır.

Uygulama örneği:

> > > a = np.array () > > > np.argsort (a) array (, dtype = int64)

(6) Ara ve filtrele

Dizideki maksimum ve minimum değerlerin dizinlerini verir

numpy.argmax (a, axis = None, out = None) numpy.argmin (a, axis = None, out = None)

Dizideki sıfır olmayan bir öğenin dizinini verir

numpy.nonzero (a)

Verilen koşulu karşılayan dizideki öğenin dizinini verir

numpy.where (koşul)

Uygulama örneği:

> > > a = np.arange (10) > > > a dizi() > > > np.where (a < 5) (dizi (, dtype = int64),) > > > a = a. tazeleme ((2, -1)) > > > a dizi() > > > np.where (a < 5) (dizi (, dtype = int64), array (, dtype = int64)) > > > np.where (a < 5, a, 10 * a) dizi(, >)

Dizide aynı yapının Boole dizisi tarafından seçilen her bir öğeyi döndürür

numpy.extract (koşul, dizi)

Uygulama örneği:

> > > a = np.arange (12). tazeleme ((3, 4)) > > > a dizi(, , >) > > > koşul = np.mod (a, 3) == 0 > > > durum dizi(, , >) > > > np.extract (koşul, a) dizi()

(7) Öğeleri artırın veya azaltın

Girdi dizisine, verilen dizinden önce verilen eksen boyunca değerler ekleyin ve yeni diziyi döndür

numpy.insert (arr, obj, values, axis = None)

Uygulama örneği:

> > > a = np.array () > > > a dizi() > > > np.insert (a, 1, 5) dizi() > > > np.insert (a, 1, 5, eksen = 0) dizi() > > > np.insert (a, 1 ,, eksen = 0) dizi() > > > np.insert (a, 1, 5, eksen = 1) dizi()

Belirtilen alt diziyi verilen dizinden önce verilen eksen boyunca sil ve yeni diziyi döndür

numpy.delete (arr, obj, axis = Yok)

Uygulama örneği:

> > > a = np.array () > > > a dizi() > > > np.delete (a, 1) dizi() > > > np.delete (a, 1, eksen = 0) dizi() > > > np.delete (a, 1, eksen = 1) dizi()

Yinelenen öğeleri kaldırın

numpy.unique (ar, return_index = False, return_inverse = False, return_counts = False, axis = Yok)

  • arr: girdi dizisi, tek boyutlu bir dizi değilse, genişletilecektir;

  • return_index: true ise, eski listedeki yeni liste elemanının konumunu (indis) döndürün ve bir liste biçiminde saklayın;

  • return_inverse: true ise, yeni listedeki eski liste elemanının konumunu (indis) döndürün ve bir liste biçiminde saklayın;

  • return_counts: true ise, orijinal dizideki tekilleştirme dizisindeki öğelerin oluşum sayısını döndürür.

Uygulama örneği:

> > > a = np.array () > > > np.unique (a) dizi() > > > np.unique (a, eksen = 0) dizi() > > > u, endeksler = np.unique (a, return_index = True) > > > sen dizi() > > > endeksler array (, dtype = int64) > > > u, endeksler = np.unique (a, return_inverse = True) > > > sen dizi() > > > endeksler array (, dtype = int64) > > > u, num = np.unique (a, return_counts = True) > > > sen dizi() > > > num array (, dtype = int64)

(8) Dizi IO

numpy, ndarray nesnesini yeniden oluşturmak için gereken verileri, grafikleri, dtype'ı ve diğer bilgileri depolamak için kullanılan, ndarray nesnesi için yeni bir ikili dosya formatı sunar. .Npy dosyası tek bir diziyi ve .npz dosyası birden çok diziyi depolar.

Tek bir diziyi dosyaya kaydedin

numpy.save (dosya, dizi, allow_pickle = True, fix_imports = True)

  • file: Kaydedilecek dosya, uzantısı .npy, dosya yolunun sonunda .npy uzantısı yoksa, uzantı otomatik olarak Artı

  • arr: kaydedilecek dizi;

  • allow_pickle: İsteğe bağlı, boolean, nesne dizilerini kaydetmek için python turşusu kullanımına izin verir.

  • fix_imports: pyhton2'nin python3 tarafından kaydedilen verileri okumasını kolaylaştırmak için isteğe bağlıdır.

Birden çok diziyi dosyaya kaydedin

Numpy.savze işlevi, bir dosyaya birden çok dizi yazmak için kullanılır.Varsayılan olarak diziler, .npz uzantılı bir dosyada sıkıştırılmamış ham ikili biçimde kaydedilir.

numpy.savez (dosya, * args, ** kwds)

  • file: Kaydedilecek dosya, uzantısı .npz, dosya yolunun sonunda .npz uzantısı yoksa, uzantı otomatik olarak Artı

  • args: Kaydedilecek dizi. Anahtar kelime parametreleri, diziye bir ad vermek için kullanılabilir. Anahtar kelime olmayan parametreler tarafından iletilen dizi otomatik olarak arr_0, arr_1 ... olarak adlandırılacaktır.

  • kwds: Kaydedilecek dizi için anahtar sözcük adını kullanın.

Dosyadan dizi yükle

numpy.load (dosya, mmap_mode = Yok, allow_pickle = True, fix_imports = True, encoding = 'ASCII')

  • dosya: Dosyaya benzer nesne (support seek () ve read () yöntemleri) veya okunacak dosya yolu;

  • arr: Açık yöntem, Yok | 'r +' | 'r' | 'w +' | 'c';

  • allow_pickle: İsteğe bağlı, boolean, nesne dizilerini kaydetmek için python turşusu kullanımına izin verir.

  • fix_imports: isteğe bağlı, pyhton2'nin python3 tarafından kaydedilen verileri okumasını kolaylaştırmak için;

  • kodlama: kodlama biçimi, "latin1" | "ASCII" | "bayt".

Uygulama örneği:

a = np.array () b = np.arange (0, 1.0, 0.1) c = np.sin (b) # c Anahtar kelime parametresi sin_array kullanıldı np.savez ("runoob.npz", a, b, sin_array = c) r = np.load ("runoob.npz") print (r.files) # Her dizi adını görüntüle print (r) # dizi a baskı (r) # dizi b baskı (r) # dizi c

Diziye erişmek için metin dosyasını kullanın

numpy ayrıca metin dosyalarındaki verilere erişmeyi de destekler. Savetxt işlevi, verileri basit bir metin dosyası biçiminde depolar ve buna uygun olarak verileri elde etmek için loadtxt işlevini kullanır.

Uygulama örneği:

a = np.array () np.savetxt ('out.txt', a) b = np.loadtxt ('out.txt') baskı (b)

Ortak işlevler

(1) Yuvarlama işlevi

yuvarlama

numpy.around (a, ondalık = 0, çıkış = Yok)

Uygulama örneği:

> > > np.around () dizi() > > > np.around (, ondalık = 1) dizi() > > > np.around () # en yakın çift değere yuvarlar dizi ()

Sonuna git ve içeri gir

numpy.floor (a) numpy.ceil (a)

Uygulama örneği:

> > > np.floor () dizi() > > > np.ceil () dizi()

(2) Matematiksel fonksiyonlar

(3) İstatistiksel işlevler

Küçük test

Örnek: köşeler, üç boyutlu uzayda birkaç rastgele noktadan oluşan bir koleksiyondur, p, üç boyutlu uzayda bir noktadır, köşelerde p'ye en yakın noktayı bulur ve mesafelerini hesaplar.

1. python dizisi ile gerçekleştirin:

matematik ithal etmek köşeler = p = d = liste köşelerde v için: d. uygulama end (math.sqrt (math.pow (v-p, 2) + math.pow (v-p, 2) + math.pow (v-p, 2))) baskı (köşeler, min (d))

2. Uyuşuk dizi ile anlayın:

numpy'yi np olarak içe aktar vertices = np.array () p = np.array () d = np.sqrt (np.sum (np.square ((köşeler-p)), eksen = 1)) baskı (köşeler, d.min)

Rastgele 1000 puan oluşturun ve iki yöntemin verimliliğini karşılaştırın.

Yazar: Tianyuan savurgan oğul, CSDN blogundan seçildi

Orijinal https://blog.csdn.net/xufive/article/details/87396460.

Son

Zaferin Kralı Dünya Şampiyonası: eStar Huahai, Baili Xuance'ı yakın dövüşte oynadı ve azıcık çılgın öğreti
önceki
Yarının Gemisi: Lütfen Rin Dong'a beni tekrar azarlaması için yalvarın! Yüksek savunma öncüsü, nasıl kullanılacağını bilir
Sonraki
Linux çekirdeği UDP paket alımının verimliliği nasıl hızlı bir şekilde optimize edilir? | CSDN blog seçimi
King of Glory: Athena ve Wonder Woman geri dönüyor, oyuncular bu kısıtlamaların da geri dönmesini öneriyor
2018'de Çin'in kredi kartı endüstrisinin piyasa durumu ve gelişme eğiliminin analizi. Gelecekteki tüketim senaryoları geniş geliştirme alanı getirecek
Aoki kahverengi ne tür peri saç rengi?
Kralın İhtişamının Yeniden Düzenlenmesi: Xuan Ce güçleniyor, Zhuge Liang geri yuvarlanarak yüz tokadı bir an mı planlıyor?
CEO akşam çalışması: bugün büyük şirketlerin manşetlerine bir bakış
Onmyoji SP Arakawanın ana zaman çizelgesi spekülasyonu: eski arkadaşlar yeni düşman olur, Xiaolang "gamalı haç" mı?
NetEase Bulut Müzik Mühendisi, mesaj kuyruğunu dönüştürmenin yolunu kişisel olarak ortaya çıkardı! | Teknik Başlıklar
En ince siyah dizi, bu yaz iyi görünmek ve sıkıcı olmamak için nasıl eşleşmeli?
Yeni ev teslim edildi ve kadın sahibi kapıyı açtı ve korktu! Aman tanrım, çok iğrenç
programcı! Python öğrenmeyi bırak
Bir saat içinde 5 çocuğu kurtardı, "sert" amca ağladı ...
To Top