天天看點

科學計算工具NumPy(1):ndarray的建立于資料類型

科學計算工具NumPy(1):ndarray的建立于資料類型

科學計算工具NumPy(2):ndarray的矩陣處理

科學計算工具NumPy(3):ndarray的元素處理

Numpy(Numerical Python)

Numpy:提供了一個在Python中做科學計算的基礎庫,重在數值計算,主要用于多元數組(矩陣)處理的庫。用來存儲和處理大型矩陣,比Python自身的嵌套清單結構要高效的多。本身是由C語言開發,是個很基礎的擴充,Python其餘的科學計算擴充大部分都是以此為基礎。

高性能科學計算和資料分析的基礎包

ndarray,多元數組(矩陣),具有矢量運算能力,快速、節省空間

矩陣運算,無需循環,可完成類似Matlab中的矢量運算

線性代數、随機數生成

import numpy as np      

Scipy

Scipy :基于Numpy提供了一個在Python中做科學計算的工具集,專為科學和工程設計的Python工具包。主要應用于統計、優化、整合、線性代數子產品、傅裡葉變換、信号和圖像處理、常微分方程求解、稀疏矩陣等,在數學系或者工程系相對用的多一些,和資料處理的關系不大, 我們知道即可,這裡不做講解。

在NumPy庫的基礎上增加了衆多的數學、科學及工程常用的庫函數

線性代數、常微分方程求解、信号處理、圖像處理

一般的資料處理numpy已經夠用

import scipy as sp

ndarray的建立于資料類型

NumPy數組是一個多元的數組對象(矩陣),稱為ndarray,具有矢量算術運算能力和複雜的廣播能力,并具有執行速度快和節省空間的特點。

注意:ndarray的下标從0開始,且數組裡的所有元素必須是相同類型

ndarray擁有的屬性

ndim屬性:次元個數

shape屬性:次元大小

dtype屬性:資料類型

ndarray的随機建立

通過随機抽樣 (numpy.random) 生成随機資料。

# 導入numpy,别名np
import numpy as np
 
# 生成指定次元大小(3行4列)的随機多元浮點型資料(二維),rand固定區間0.0 ~ 1.0
arr = np.random.rand(3, 4)
print(arr)
print(type(arr))
 
# 生成指定次元大小(3行4列)的随機多元整型資料(二維),randint()可以指定區間(-1, 5)
arr = np.random.randint(-1, 5, size = (3, 4)) # 'size='可省略
print(arr)
print(type(arr))
 
# 生成指定次元大小(3行4列)的随機多元浮點型資料(二維),uniform()可以指定區間(-1, 5)
arr = np.random.uniform(-1, 5, size = (3, 4)) # 'size='可省略
print(arr)
print(type(arr))
 
print('次元個數: ', arr.ndim)
print('次元大小: ', arr.shape)
print('資料類型: ', arr.dtype)      

運作結果:

[[ 0.09371338  0.06273976  0.22748452  0.49557778]
 [ 0.30840042  0.35659161  0.54995724  0.018144  ]
 [ 0.94551493  0.70916088  0.58877255  0.90435672]]
<class 'numpy.ndarray'>
 
[[ 1  3  0  1]
 [ 1  4  4  3]
 [ 2  0 -1 -1]]
<class 'numpy.ndarray'>
 
[[ 2.25275308  1.67484038 -0.03161878 -0.44635706]
 [ 1.35459097  1.66294159  2.47419548 -0.51144655]
 [ 1.43987571  4.71505054  4.33634358  2.48202309]]
<class 'numpy.ndarray'>
 
次元個數:  2
次元大小:  (3, 4)
資料類型:  float64      

ndarray的序列建立

1.

np.array(collection)

collection 為 序列型對象(list)、嵌套序列對象(list of list)。

# list序列轉換為 ndarray
lis = range(10)
arr = np.array(lis)
 
print(arr)            # ndarray資料
print(arr.ndim)        # 次元個數
print(arr.shape)    # 次元大小
 
# list of list嵌套序列轉換為ndarray
lis_lis = [range(10), range(10)]
arr = np.array(lis_lis)
 
print(arr)            # ndarray資料
print(arr.ndim)        # 次元個數
print(arr.shape)    # 次元大小      
# list序列轉換為 ndarray
[0 1 2 3 4 5 6 7 8 9]
1
(10,)
 
# list of list嵌套序列轉換為 ndarray
[[0 1 2 3 4 5 6 7 8 9]
 [0 1 2 3 4 5 6 7 8 9]]
2
(2, 10)      

2. np.zeros()

指定大小的全0數組。注意:第一個參數是元組,用來指定大小,如(3, 4)。

3. np.ones()

指定大小的全1數組。注意:第一個參數是元組,用來指定大小,如(3, 4)。

4. np.empty()

初始化數組,不是總是傳回全0,有時傳回的是未初始的随機值(記憶體裡的随機值)。

# np.zeros
zeros_arr = np.zeros((3, 4))
 
# np.ones
ones_arr = np.ones((2, 3))
 
# np.empty
empty_arr = np.empty((3, 3))
 
# np.empty 指定資料類型
empty_int_arr = np.empty((3, 3), int)
 
print('------zeros_arr-------')
print(zeros_arr)
 
print('\n------ones_arr-------')
print(ones_arr)
 
print('\n------empty_arr-------')
print(empty_arr)
 
print('\n------empty_int_arr-------')
print(empty_int_arr)      
------zeros_arr-------
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
 
------ones_arr-------
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
 
------empty_arr-------
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
 
------empty_int_arr-------
[[0 0 0]
 [0 0 0]
 [0 0 0]]      

5.

np.arange()

reshape()

arange() 類似 python 的 range() ,建立一個一維 ndarray 數組。

reshape() 将 重新調整數組的維數。

# np.arange()
arr = np.arange(15) # 15個元素的 一維數組
print(arr)
print(arr.reshape(3, 5)) # 3x5個元素的 二維數組
print(arr.reshape(1, 3, 5)) # 1x3x5個元素的 三維數組      

運作結果

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
 
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
 
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]]      

6.

np.arange()

random.shuffle()

random.shuffle() 将打亂數組序列(類似于洗牌)。
arr = np.arange(15)
print(arr)
 
np.random.shuffle(arr)
print(arr)
print(arr.reshape(3,5))      
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
 
[ 5  8  1  7  4  0 12  9 11  2 13 14 10  3  6]
 
[[ 5  8  1  7  4]
 [ 0 12  9 11  2]
 [13 14 10  3  6]]      

ndarray的資料類型

dtype

參數

指定數組的資料類型,類型名+位數,如float64, int32

2.

astype

方法

轉換數組的資料類型
# 初始化3行4列數組,資料類型為float64
zeros_float_arr = np.zeros((3, 4), dtype=np.float64)
print(zeros_float_arr)
print(zeros_float_arr.dtype)
 
# astype轉換資料類型,将已有的數組的資料類型轉換為int32
zeros_int_arr = zeros_float_arr.astype(np.int32)
print(zeros_int_arr)
print(zeros_int_arr.dtype)      
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
float64
 
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
int32