數據分析——numpy詳解1

數據分析——numpy詳解1

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

下集再見!!!


分享到:


相關文章: