basit, üst düzey yanıt olduğunu NumPy katmanları Python'un tip tepesinde bir ikinci tip sistemi sistemi. Bir NumPy nesnesinin type
için sorduğunuzda
, sen numpy.ndarray
gibi --something konteynerin türünü olsun. Ancak, dtype
için sorulduğunda, öğelerinin öğelerinin (numpy tarafından yönetilen) türünü alırsınız. Bazen
>>> from numpy import *
>>> arr = array([1.0, 4.0, 3.14])
>>> type(arr)
<type 'numpy.ndarray'>
>>> arr.dtype
dtype('float64')
, varsayılan
float
türü kullanırken olduğu gibi, öğe veri tipi (
dtype
) bir Python tipine denktir. Ama bu aynı değil, eşdeğer:
>>> arr.dtype == float
True
>>> arr.dtype is float
False
Diğer durumlarda, eşdeğer Python türü yoktur. Örneğin, uint8
'u belirttiğinizde. Bu veri değerleri/türleri Python tarafından yönetilebilir, ancak C, Rust ve diğer "sistem dilleri" nden farklı olarak, doğrudan makine veri tiplerine (uint8
"işaretsiz baytlarla hesaplamalar" gibi) hizalanan değerleri yönetmek yaygın değildir. Python için kullanım çantası.
Büyük öykü, NumPy'nin kendi tür sistemi altında çalışan diziler ve matrisler gibi kaplar sağlamasıdır. Ve bu kaplarda (ve onların elemanlarında) çalışmak için oldukça faydalı, iyi optimize edilmiş rutinler bir demet sağlar. Bakım kullanıyorsanız, NumPy ve normal Python hesaplamalarını karıştırabilir ve eşleştirebilirsiniz.
Python türü yok uint8
.döndürür bir NumPy tipi denilen uint8
adında bir yapıcı işlevi vardır: "Ben (d_type değil) türü bir dizi oluşturabilir uint8 ..."
>>> u = uint8(44)
>>> u
44
>>> u.dtype
dtype('uint8')
>>> type(u)
<type 'numpy.uint8'>
Yani Hayır. Yapamazsın. Böyle bir hayvan yok. Hesaplamaları uint8
kurallarıyla kısıtlı hesaplamalar yapmadan NumPy arrays
(a.k.a. NumPy skaler değerleri) kullanamazsınız. Ör:
>>> uint8(44 + 1000)
20
>>> uint8(44) + uint8(1000)
20
değerleri mod 256 hesaplamak istiyorsanız Ancak, Python'un mod operatörü kullanmak muhtemelen daha kolay:
>> (44 + 1000) % 256
20
verileri Sürüş içine daha büyük 255 değerleri uint8
veri türleri ve daha sonra aritmetik yapmak, mod-256 aritmetik elde etmek için oldukça arka kapıdır. Dikkatli değilseniz, Python'un değerlerinizi tam tamsayıya (mod-256 düzenini öldürerek) "yükseltmesine" veya taşma istisnalarını tetiklemesine neden olacaksınız (çünkü C ve makine dilinde harika çalışan püf noktaları genellikle daha yüksek seviyeli diller).
"' dtype' yalnızca bellekte baytların bir skaler tarafından nasıl yorumlanacağını tanımlar »→ ayrıca yorumlandıkları yolu tanımlar (örn." Int32' vs float32 "). – Veedrac
Teşekkürler, Veedrac, bu cümleyi biraz daha hassaslaştırdım. –