1. 程式人生 > >python numpy基礎 陣列和向量計算

python numpy基礎 陣列和向量計算

在python 中有時候我們用陣列操作資料可以極大的提升資料的處理效率,

類似於R的向量化操作,使得資料的操作趨於簡單化,在python 中是使用numpy模組可以進行陣列和向量計算。

下面來看下簡單的例子

12345 import numpy asnp data=np.array([2,5,6,8,3])
#構造一個簡單的陣列print(data)

結果:

[2 5 6 8 3]

123 data1=np.array([[2,5,6,8,3],np.arange(5)])#構建一個二維陣列print(data1)

結果:

[[2 5 6 8 3]
[0 1 2 3 4]]

我們也可以通過shape和dtype方法檢視陣列的維度和資料格式

1234 print(data.shape)print(data.dtype)print(data1.shape)print(data1.dtype)

結果:

(5,)
int32

(2, 5)
int32

可以看出data是一維陣列,每組元素為5個,資料型別為32位int 型別

data1 為二維陣列,每個組有5個元素,資料型別為32位int型別

有一個較好的區分方法是看列印結果中,中括號的層數和位置,就可以看出陣列的維度,一層中括號代表一個維度。

其他的陣列屬性方法還有:

array.ndim   陣列的維數,一維陣列結果為1,二維陣列列印結果為2

array.size     陣列的元素個數

array.itemsiz   陣列每個元素的位元組大小

接下來我們瞭解下陣列中的資料型別:

NumPy中的基本資料型別
名稱 描述
bool 用一個位元組儲存的布林型別(True或False)
inti 由所在平臺決定其大小的整數(一般為int32或int64)
int8 一個位元組大小,-128 至 127
int16 整數,-32768 至 32767
int32 整數,-2 ** 31 至 2 ** 32 -1
int64 整數,-2 ** 63 至 2 ** 63 – 1
uint8 無符號整數,0 至 255
uint16 無符號整數,0 至 65535
uint32 無符號整數,0 至 2 ** 32 – 1
uint64 無符號整數,0 至 2 ** 64 – 1
float16 半精度浮點數:16位,正負號1位,指數5位,精度10位
float32 單精度浮點數:32位,正負號1位,指數8位,精度23位
float64或float 雙精度浮點數:64位,正負號1位,指數11位,精度52位
complex64 複數,分別用兩個32位浮點數表示實部和虛部
complex128或complex 複數,分別用兩個64位浮點數表示實部和虛部

基礎的陣列運算

陣列也可以進行我們常用的加減乘除運算

123 arr=np.array(np.arange(10))arr1=np.array(np.arange(1,11))print(arr*2)

結果:

[ 0  2  4  6  8 10 12 14 16 18]

1 print(arr+arr1)

結果:

[ 1  3  5  7  9 11 13 15 17 19]

注意,相加兩個陣列長度要一樣

接下來我們看下陣列索引

1 arr=np.arange(10)

用下標直接進行索引

1 print(arr[5])

結果為:

5

切片索引

1 print(arr[5:8])

結果為:

[5 6 7]

可以利用索引對資料進行更改操作

12 arr[5]=120print(arr)

結果為:

[  0   1   2   3   4 120   6   7   8   9]

可以看到下標為5的數已經變成120了。

此外,陣列還可以進行布林操作

123 arr=np.arange(5)name=np.array(['a','b','b','c','a'])print(name=='a')

結果為:

[ True False False False True]

即滿足條件的資料全部以True的結果輸出。

接下來我們可以利用name陣列設定條件後的布林值對arr陣列進行相關操作

1 print(arr[name=='a'])

結果為:

[0 4]

即把arr中對應於name中a相對應位置的元素打印出來。

多條件操作

123 result=(name='a')|(name='c')print(result)print(name[result])

結果為:

[ True False False True True]
[‘a’ ‘c’ ‘a’]

接下來,我們瞭解下ufunc方法

用於操作單個數組的函式有如下:

用於操作兩個或多個數組的方法

相關的函式方法使用

np.meshgrid 用於生成多維矩陣

123 a,b=np.meshgrid(np.arange(1,5),np.arange(2,4))print(a)print(b)

結果為:

[[1 2 3 4]
[1 2 3 4]]
[[2 2 2 2]
[3 3 3 3]]

按照資料最少的陣列形成陣列

np.where 是三元表示式  x if  condition  else y的向量化版本

1234567 arr1=np.arange(5)arr2=np.arange(20,25)condition=np.array([1,0,1,0,0])result=np.where(condition,arr1,arr2)print(arr1)print(arr2)print(result)

結果為:

[0 1 2 3 4]
[20 21 22 23 24]
[ 0 21 2 23 24]

可以看出,result的結果中,條件為1的顯示陣列arr1的內容,條件為0的顯示arr2的內容

數學統計方法

在陣列中我們也可以使用數學統計方法進行計數,例如sum mean  std  等

12345 arr=np.random.randint(1,20,10)print(arr)print(np.mean(arr))print(np.sum(arr))print(np.std(arr))

結果為:

[19 14 8 13 13 10 10 9 19 7]
12.2
122
4.01995024845

具體的方法內容如下圖所示:

布林型陣列的相關統計方法

1234 arr=np.arange(-20,10)result=(arr>5).sum()print(arr)print(result)

結果為:

-20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3
-2 -1 0 1 2 3 4 5 6 7 8 9]

4

可以對資料進行判斷後進行個數求和

其他的陣列方法還有

資料的讀取和儲存

線性函式的常用方法

123 arr=np.array([np.random.randint(1,10,5),np.random.randint(10,20,5)])print(arr)print(np.dot(arr,2))

結果為

[[ 4 6 5 1 6]
[14 16 11 10 18]]
[[ 8 12 10 2 12]
[28 32 22 20 36]]

dot方法可以進行矩陣相乘操作

其他方法如下圖

最後我們瞭解下numpy中的隨機數生成方法

上面的很多例子中我們已經用到了隨機數生成,

12 arr=np.random.random(10)print(arr)

結果為

[ 0.90051063 0.72818635 0.00411373 0.13154345 0.45513344 0.9700776
0.42150977 0.27728599 0.50888291 0.62288808]

其他形式的隨機數生成方法

瞭解以上numpy的操作方法,基本的資料操作問題應該不是很大了。

相關推薦

python numpy基礎 陣列向量計算

在python 中有時候我們用陣列操作資料可以極大的提升資料的處理效率, 類似於R的向量化操作,使得資料的操作趨於簡單化,在python 中是使用numpy模組可以進行陣列和向量計算。 下面來看下簡單的例子 import n

Numpy基礎 --陣列向量計算 利用Python進行資料分析讀書筆記

Numpy 陣列和向量計算 程式碼下載 import numpy as np #ndarray物件 陣列 NumPy陣列 建立ndarray data1=[6,7.5,8,0,1] arr1=np.array(data1) a

01- Numy基礎:陣列向量計算

1. NumPy基礎:陣列和向量計算 NumPy (Numeriacal /njuː’merɪk(ə)l/ Python)是高效能科學計算和資料分析的基礎包。 它是幾乎所有高階工具的構建基礎,其部分功能如下: Ndarray,一個具有向量算術運算和複雜廣

資料基礎---《利用Python進行資料分析·第2版》第4章 NumPy基礎陣列向量計算

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用Nu

使用Python進行資料分析--------------NumPy基礎陣列向量計算

NumPy(Numerical重點內容 Python的簡稱) 是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用NumPy的陣列作為構建基礎。 NumPy的部分功能如下: - ndarray,一個具有向量算術運算和複雜廣播能力的快速且節省空間的多維陣列。 -

第4章 NumPy基礎陣列向量計算

                                          &nb

第4章 NumPy基礎陣列向量計算

參考 目錄 NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用NumPy的陣列作為構建基礎。 NumPy的

第四篇 NumPy基礎陣列⽮量計算

NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。⼤多數提供科學計算的包都是⽤NumPy的陣列作為構建基礎。NumPy的部分功能如下:   ndarray,⼀個具有⽮量算術運算和複雜⼴播能⼒的快速且節省空間的多維陣列。   ⽤於對整組資料進⾏快速運算的標準數學函式(⽆需

【資料分析】:Numpy基礎陣列向量運算

☆Numpy(Numerical Python)是高效能科學計算和資料分析的基礎包,它是幾乎所有資料分析高階工具的構建基礎。 ndarry ,一個具有向量算數運算和複雜廣播能力的快速且節省空間的多維陣列。 用於對整組資料進行快速運算的標準數學函式(無需編寫迴

Python Numpy陣列array矩陣matrix

作者:Marho11 原文地址:https://blog.csdn.net/zhihaoma/article/details/51002742 NumPy的主要物件是同種元素的多維陣列。這是一個所有的元素都是一種型別、通過一個正整數元組索引的元素表格(通常是元素是數字)。在NumPy中

Python學習筆記----Numpy基礎(陣列物件的屬性及陣列建立)

Numpy是Python的一種開源的數值計算擴充套件,這種工具可以用來儲存和處理大型矩陣,比Python自身的巢狀列表結構高效的多。 Numpy的主要物件是同構多維陣列(ndarray),它是一個元素表,所有元素都是相同的資料型別,由正整數元組索引。 下面列舉一些nd

python numpy 如何獲取更改陣列(array)的形狀、維數-shape&reshape

主要用到shape, reshape函式 我們先搞清np.ndarrayd陣列的特點 import numpy as np ex = np.arange(0,12,1) ex # 括號裡的0可以省

Python Numpy陣列array矩陣matrix的用法與區別

出處:http://blog.csdn.net/zhihaoma/article/details/51002742 NumPy的主要物件是同種元素的多維陣列。這是一個所有的元素都是一種型別、通過一個正整數元組索引的元素表格(通常是元素是數字)。在NumPy中

python基礎23的區別,以及forwhile的循環

python基礎;2和3的區別 ;字符編碼;if;whil;for循環 ; 第三方庫 字典 1、python2\python3的區別:python2\python3的區別:一、代碼重復,python2代碼重復功能復用,夾雜其他語言的部分,不規範python3進行整合,簡潔優美編譯型:一次性

numpy陣列矩陣的區別

matrix是array的分支,matrix和array在很多時候都是通用的,用哪一個都一樣; 如果兩個可以通用,那就選擇array,因為array更靈活,速度更快,很多人把二維的array也翻譯成矩陣。 相同點:索引方式相同,都可以使用a[i][j],a[i,j]進行索引

python numpy : random.rand random.random 的區別

相同點:兩個函式都是在 [0, 1) 的均勻分佈中產生隨機數。 不同點:引數傳遞不同。random.random( )接收一個單獨的元組,而random.rand( )接收分開的引數 例如: 要生成3行5列的陣列,你可以 np.random.rand(3, 5) 或者 np.

python中的陣列矩陣

陣列和矩陣計算的區別。通過getA()可以把矩陣轉化為陣列  # from numpy import* w = ones((3, 1)) #建立陣列 weights = mat(w) #轉換為numpy矩陣 s = weights.getA()

Python+Selenium基礎——開啟關閉火狐瀏覽器

初始化一個webdriver例項物件driver,然後開啟和關閉firefox瀏覽器。要用selenium開啟fiefox瀏覽器。首先需要去下載一個driver外掛geckodriver.exe, 下載地址https://github.com/mozilla/geckodriver/releases

python numpy基礎

                                          &nb

python numpy--改變陣列的維度

來自 《Python資料分析基礎教程:Numpy 學習指南(第2版)》 Numpy改變陣列維度的方法有: reshape() ravel() flatten() 用元組設定維度 transpose() resize() 下面將依次進行說明 首先,建立一個多維陣