天天看點

Numpy ndarray 多元數組對象

目錄

​​Numpy基礎​​

​​介紹​​

​​代碼操作​​

​​生成ndarray​​

​​ndarray的資料類型​​

​​Numpy 數組計算​​

​​基礎索引和切片​​

​​布爾索引​​

​​特殊索引​​

​​數組的轉換和換軸​​

​​總結​​

​​每文一語​​

Numpy基礎

介紹

目前它是Python數值計算中最為重要的基礎包,将numpy的數組的對象作為資料互動的通用語,一般我們要充分了解好矩陣計算的原理,這需要你要有一些線性代數的基礎知識。在對資料處理、清洗、構造子集、過濾、變換以及其他計算的過程快速的進行向量化計算,後續也會介紹R語言,因為R語言就是一個原生态基于向量化計算的程式設計語言。

Numpy的核心特征之一就是一個N維數組對象——ndarray,這是一個快速靈活的大型資料集容器,可以進行科學數值計算。

代碼操作

import numpy as np      

導入好包之後,我們随機生成一個2*3的數組,2行3列的随機數組

data=np.random.randn(2,3)      
Numpy ndarray 多元數組對象

對數組的簡單操作

data*10

>>array([[  9.00839244, -17.67421607,  -0.03125454],
       [ 19.79906711,  -2.62145167, -12.55106031]])

data+data

>>array([[ 1.80167849, -3.53484321, -0.00625091],
       [ 3.95981342, -0.52429033, -2.51021206]])

data.shape

>>(2, 3)

data.dtype

>>dtype('float64')      

生成ndarray

生成數組的最簡單的方法就是使用array函數,對于傳入的類型可以是其他任意的序列,如你傳入一個清單,那麼它就會接收這個清單并轉換為數組類型,如果傳入的是多個清單那麼它就會接收多個,線上性代數裡面我們叫這個是次元,比如下面的就是一個2行3列的矩陣。

data1=[[1,2,3],[4,5,6]]

arry1=np.array(data1)

arry1

>>array([[1, 2, 3],
       [4, 5, 6]])

arry1.ndim

>>2

arry1.shape

>>2, 3)      

除了這個我們還可以使用其他的函數來建立數組,比如給定了長度和形狀類型就會一次性建立完畢,這裡是建立了一個2*3的元素是1的數組

np.ones((2,3))
>>array([[1., 1., 1.],
       [1., 1., 1.]])      

 numpy裡面也有像Python range()函數一樣的效果——np.arange(),操作效果和Python的range函數有異曲同工之妙,start,stop,step都是可設定的。

Numpy ndarray 多元數組對象

對角矩陣生成

Numpy ndarray 多元數組對象

ndarray的資料類型

如何檢視數組的資料類型以及如何進行轉換,在numpy裡面整型:int32,浮點型:float64.

Numpy ndarray 多元數組對象

Numpy 數組計算

基于numpy的數組計算在之前我也示範了一些,四則運算,加減乘除,以及一些數組運算,每一個數組與數組之間的計算都是元素互相對于的,并不是獨立的,這個是我們需要了解清楚的地方,有趣的是,我們需要比較兩個相同維數的數組,我們可以利用> < = 來檢視,它傳回的是布爾值。

基礎索引和切片

在一維的數組裡面,和Python清單裡面的所有一樣,如果是高維的就有所不同了,就需要利用多重索引了,這裡的變量和上面的一樣

Numpy ndarray 多元數組對象

如果産生了一個三位的數組,比如一個2*2*3的數組,我們按照索引,可以自動索引出來第一個的的數組

對于高維的數組的切片,我們需要注意的是,它的切片原理是按照數組裡面的數組進行切片的,比如一個二維數組(2*3*2)的,我們需要取出每個機關數組裡面的第一個元素,我們應該如何做

Numpy ndarray 多元數組對象

很明顯的我們可以看出多元數組的切片特點:我這裡抽象化為清單的特點來解釋,比如我們可以把多元數組看做是一個清單裡面的多個清單,也就是嵌套清單,然後我們按照索引來取,上述例子就是首先取出兩個大的數組,然後從這個兩個大的數組裡面再去前兩個數組,最後取出索引為0的元素,這樣層層遞減,一步一步的索引是numpy索引的特點,之是以大資料技術之分析與計算,要用到矩陣計算的優化,就是來源于它的分而治之的原理和特點。

布爾索引

其實就是對數組裡面的值或元素進行比較,之中傳回布爾值即可

Numpy ndarray 多元數組對象

上述例子就是産生了一個一維的字元串的數組,然後我們通過比較得出布爾值來擷取data的值,自然就擷取到data[0]的數組啦

注意在Python裡面我們可以用and or來判斷,在numpy裡面我們需要&(and)|(or)來解決你的需求,記住喲

Numpy ndarray 多元數組對象
Numpy ndarray 多元數組對象

特殊索引

我們需要索引出不同位置的數組,這個時候我們還在一個一個的取出來嗎,當然不是我們可以利用特殊的索引來解決這個問題,比如下面的例子

Numpy ndarray 多元數組對象

下面我們來看看這個特殊索引的其他的用法

Numpy ndarray 多元數組對象

第一步我們我們按照索引取出對角線的元素,第二的一個我們想要得到一個二維的數組,我們取出一個大數組裡面索引位置分别為:1 5 7 2的一維數組然後我們利用索引位置的調換,把元素重新的進行了排序。

數組的轉換和換軸

我們随機生成一個0-15的元素組成3*5的一個數組,然後利用.T屬性,如果學過線性代數的小夥伴一定對這個不陌生,矩陣的轉置:把行變成列,把列變成行。

Numpy ndarray 多元數組對象

總結

在numpy的數組操作我們現在其實并沒有發現這個對我們的資料分析有什麼用處,這個很正常。就像我們之前學習線性代數,我們發現這個矩陣對我們并沒什麼用,但是當你使用MATLAB的時候才發現“書到用時方恨少”的道理。

每文一語

穹鷹嗷鳴雖遮日,渺雀無迎但現身。