Numpy基礎:數組和矢量計算
import numpy as np
ndarray:一種多維數組對象
ndarray是一個通用的同構數據多維容器。即:其中所有的元素必須是相同的數據類型。每一個數組都有一個shape(表示個維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象)。
創建ndarray:
np.array()
創建數組的最簡單的方法就是使用array函數。它接受一切序列型的對象(包括其它數組),然後產生一個新的含有傳入數據的numpy 數組。
ndarray會嘗試為新建的這個數組推斷出一個較為合適的數據類型。數據類型保存在一個特殊的dtype對象中。
除此之外:
np.zeros()和np.ones()創建指定長度或形狀的全0或全1數組。
np.empty()可以創建一個沒有具體值的數組。
用這些方法創建多位數組,只需要傳入一個表示形狀的元組即可:
np.zeros((2,1))
np.ones((2,2))
np.empty((2,2))
認為np.empty()返回全0數組的想法是不安全的,很多情況下,它返回的都是一些未初始化的垃圾值。
arange是Python內置的Range的數組版:
與Python的range()函數使用方法一樣。但返回的是ndarray.
數組創建函數彙總:
array():將輸入的數據(列表,元組,數組或其他的序列類型)轉換為ndarray。要麼推斷出dtype,要麼顯示指定dtype.默認直接複製輸入數據
asarray():將輸入轉換為ndarray,如果輸入本身就是一個ndarray不進行復制。
arange():類似於內置的range(),但返回的是一個ndarray,而不是一個列表。
ones(),ones_like():根據指定的形狀和dtype創建一個全1數組。ones_like()以另一個數組為參數,並根據其形狀和dtype創建一個全一的數組。
zeros(),zeros_like:類似於上一種,只不過產生全0的數組。
empty(),empty_like():創建新數組,只分配內存空間但不填充任何值。
eye(),identity():創建一個正方的N*N矩陣(對角線為1,其餘為零)參數傳入一個數字即可。
ndarray的數據類型:
dtype(數據類型)是一個特殊的對象,它含有ndarray將一塊內存解釋為特定數據結構所需的信息。
dtype的命名方式
一個類型名(如float,int),後跟一個用於表示個元素位長的數字。
常見的類型:
int8 uint8
int16 uint16
int32 uint32
int64 uint64
float32 float64
bool 布爾值
object python對象類型
string_ 固定長度的字符串類型(每個字符一個
字節)
unicode_ 固定長度的unicode類型(字節數由平臺決定)
這些數據類型可以在上述的創建ndarray中以dtype="" 的格式傳參進入。
可以通過ndarray的astype()顯示的轉換其dtype:
data = numpy.array([1,2,3,4]).astype(numpy.float64)
調用astype()無論如何都會創建一個新的數組(原始數據的一份拷貝),即使新dtype跟舊 的dtype 相同也是如此。
數組和標量之間的運算
ndarray是你不用編寫循環即可對數據執行批量運算。這通常叫做矢量化。
大小相等的數組之間的任何算術運算都會將運算應用到元素級。
不同大小的數組之間的運算叫做廣播,這裡不深入討論。
等向後學習中,在進一步理解。
基本的索引和切片:
一維數組:
將一個標量值賦值給一個切片時(arr[3:4]=8),該值會自動傳播到整個選區。
重要!!!!
跟列表相比數組切片是原始數組的視圖。
這意為著數據不會被複制,視圖上的任何修改都會直接反映到源數組上。
arr1 = numpy.array([1,2,3,4,5])
arr2 = arr1[0:2]#數據不會進行復制
arr2[:] = 6
arr1會變成[6,6,3,4,5]
這個特性主要是因為處理大數據時,將數據複製來複制去,會產生性能和內存的問題。
注:
如果你想要得到ndarray的切片的副本,而非視圖,就需要顯示的進行復制操作,
arr[5:8].copy()
高緯度數組關注me
下集再見!!!
閱讀更多 青夕 的文章