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 cDiziye 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