文章目錄
-
- 科學計算工具numpy(上)
-
- 一、什麼是numpy?
- 二、numpy基礎資料結構
-
-
- 1.numpy數組---ndarray的基本操作(屬性)
- 2.建立numpy數組---ndarray
-
- (1)清單,元組,數組,生成器等做np下的array()函數的參數建立數組
- (2)用np下的linspace()函數
- (3)用np下的zeros()、zeros_like()、ones()、ones_like() 函數
- (4)用np下的eye()函數
- (5)np下的reshape()函數
-
- 三、numpy通用函數與方法
-
-
- 1.數組的形狀:T 、reshape()、resize()
-
- (1)T 、reshape()、resize()
- (2)reshape()與resize() 的差別
- 2.ndarray的複制
- 3.改變numpy的元素類型
-
- (1)在生成np時,可以通過設定dtype屬性來設定元素的類型
- (2)改變已經生成的numpy元素類型
- 3.ndarray堆疊
- 3.ndarray的拆分
- 3.ndarray的簡單運算
-
- 小結
科學計算工具numpy(上)
一、什麼是numpy?
Numpy是python開源的科學計算工具包,它含有以下功能:
- 強大的N維數組對象:ndarray
- 對數組結構進行運算(不用周遊循環)
- 随機數、線性代數、傅裡葉變換等功能
二、numpy基礎資料結構
1.numpy數組—ndarray的基本操作(屬性)
numpy數組是一個多元數組對象,稱為ndarray,其由兩部分構成:
- 實際的資料
- 描述這些資料的中繼資料
eg:
import numpy as np
lst =[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
ar = np.array(lst)
print(lst)
print(ar, type(ar)) # ar是n維數組類型
print(ar.ndim) # ndim傳回numpy的軸數
print(ar.shape) # shape傳回numpy的緯度,軸數與列數,且是一個元組,(3,4)
print(ar.size) # 傳回元素個數
print(ar.dtype) # ndarray中元素的類型
print(ar.itemsize) # ndarray中一個元素所占的位元組數
print(ar.data) # ndarray對象ar的實體位址
# 結果:
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
[[1 2 3 4]
[2 3 4 5]
[3 4 5 6]] <class 'numpy.ndarray'>
2
(3, 4)
12
int32
4
<memory at 0x000001FFFB43CA68>
2.建立numpy數組—ndarray
(1)清單,元組,數組,生成器等做np下的array()函數的參數建立數組
eg:
# 建立數組,array()函數的括号中可以是清單,元組,數組,生成器等
ar1 = np.array(range(10)) # range是一個生成器
ar2 = np.arange(10) # 等價于上一行代碼, arange和range的用法一模一樣,隻是這是調用的np的方法
print(ar1)
print(ar2)
# 如果元素類型不同,會自動将類型轉為大的
ar3 = np.array([[1, 2, 3, 4], ['a', 'b', 'c', 'd']])
print(ar3)
# 如果每個軸中的元素不等,則無論之前輸入的是多少維,都會自動的變為一維數組
ar4 = np.array([[1, 2, 3, 4, 5], ['a', 'b', 'c', 'd']])
print(ar4, ar4.ndim)
# 結果:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[['1' '2' '3' '4']
['a' 'b' 'c' 'd']]
[list([1, 2, 3, 4, 5]) list(['a', 'b', 'c', 'd'])] 1
(2)用np下的linspace()函數
print(np.linspace(10, 20, num=6)) # []左閉右閉,num是表示顯示幾個數,如果是n等分,則num = n + 1
print(np.linspace(10, 20, num=6, endpoint=False)) # endpoint是否包含最後一個點
print(np.linspace(10, 20, num=6, retstep=True)) # retstep為True會傳回一個二進制元組,第二個參數是步長
# 結果:
[10. 12. 14. 16. 18. 20.]
[10. 11.66666667 13.33333333 15. 16.66666667 18.33333333]
(array([10., 12., 14., 16., 18., 20.]), 2.0)
(3)用np下的zeros()、zeros_like()、ones()、ones_like() 函數
# zeros() zeros_like() 元素全是0 ones() ones_like() 元素全是1
print(np.zeros(10))
print(np.zeros((3, 5))) # 注意:這裡參數是元組
print(np.zeros((3, 5), dtype=np.int))
ar1 = np.array([list(range(10)), list(range(10, 20))])
print(np.zeros_like(ar1))
ar2 = np.array(['a', 'b'])
print(np.zeros_like(ar2))
# ones和zeros的用法一模一樣
ar2 = np.array(['a', 'b'])
print(np.ones_like(ar2))
# 結果:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
[[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
['' '']
['1' '1']
(4)用np下的eye()函數
# 用eye()方法,預設生成的是對角線為1的n×n矩陣
print(np.eye(5))
# 結果:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
(5)np下的reshape()函數
# 以後常用的生成ndarray的方法
print(np.random.rand(10).reshape(2, 5))
# 結果:
[[0.39366876 0.16007069 0.9278696 0.06349453 0.13076 ]
[0.9044376 0.70655228 0.34562442 0.34571877 0.60094136]]
# 當然,一個已經存在了的np,也可以用reshape來改變形狀
ar = np.arange(10)
b = ar.reshape(2, 5)
print(b)
# 結果
[[0 1 2 3 4]
[5 6 7 8 9]]
三、numpy通用函數與方法
1.數組的形狀:T 、reshape()、resize()
(1)T 、reshape()、resize()
eg:T
ar = np.array([list(range(5)), list(range(5,10))])
print(ar.T) # 注意:這裡是ar.T 不是ar.T()
#結果:
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
eg:reshape()
ar = np.array([list(range(5)), list(range(5,10))])
print(np.reshape(ar, (5, 2))) # 用np下的reshape()函數
print(ar.reshape(5, 2)) # 用ndarray下的reshape()方法
#結果:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
[[0 1 2 3 4]
[5 6 7 8 9]]
eg:resize()
print(np.resize(ar, (5, 2))) # 用np下的resize()函數
print(ar.resize(5, 2)) # 用array下的resize()方法,發現是不行的,隻能用np下的方法
#結果:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
None
(2)reshape()與resize() 的差別
注意:reshape()與resize()的不同之處在于,對于reshape()之前與之後的元素個數必須相同,而resize()不足的随機補充,過長就截斷
eg:
import numpy as np
ar = np.arange(4)
b = np.resize(ar, (3, 4))
print(b)
# 結果:
[[0 1 2 3]
[0 1 2 3]
[0 1 2 3]]
2.ndarray的複制
eg:
import numpy as np
ar = np.array([list(range(5)), list(range(5,10))])
ar2 = ar.copy() # 屬于深複制
print(ar2)
#結果:
[[0 1 2 3 4]
[5 6 7 8 9]]
3.改變numpy的元素類型
(1)在生成np時,可以通過設定dtype屬性來設定元素的類型
eg:
ar = np.array([1, 2, 3.0], dtype=int)
print(ar)
# 結果
[1 2 3]
(2)改變已經生成的numpy元素類型
注意:numpy中的資料類型轉換,不能直接改原資料的dtype!隻能用函數astype()。
eg:dtype與astype()
ar = np.arange(3)
print(ar, ar.shape)
b = ar.astype('float32')
print(b, b.shape)
ar.dtype = 'float32'
print(ar, ar.shape)
# 結果:
[0 1 2] (3,)
[0. 1. 2.] (3,)
[0.e+00 1.e-45 3.e-45] (3,)
結論:resize()隻能用np.resize()
3.ndarray堆疊
注意:hstack()是橫向堆疊, vstack是豎直堆疊
eg:
ar = np.array([[1], [2], [3]]) # 3*1
ar2 = np.array([['a'], ['b'], ['c']]) # 3*1
print(np.hstack((ar, ar2))) # 橫向連接配接 3*2
print(np.vstack((ar, ar2))) # 豎向疊加 6*1
# 結果:
[['1' 'a']
['2' 'b']
['3' 'c']]
[['1']
['2']
['3']
['a']
['b']
['c']]
3.ndarray的拆分
注意:hsplit()是橫向拆分, vsplit()是豎直拆分
eg:
ar = np.arange(16).reshape(4, 4)
print(ar)
print(np.hsplit(ar, 2)[0]) # 數值2代表的是要分成幾列,0是代表取第1列資料
# 結果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 0 1]
[ 4 5]
[ 8 9]
[12 13]]
3.ndarray的簡單運算
eg:
ar = np.arange(8).reshape(2, 4)
print(ar + 10) # 加法
print(ar - 1) # 減法
print(ar * 10) # 乘法
print(ar / 2) # 除法
print(ar.mean()) # 求平均數
print(ar.max()) # 求最大值
print(ar.min()) # 求最小值
print(ar.std()) # 求标準差
print(ar.var()) # 求方差
print(np.sort(ar)) # 排序
print(ar.sum()) # 求和
print(np.sum(ar, axis=1)) # 求方和,axis=1是按照行求和,axis=0是按照列求和
小結
-
的轉置是narray
,不是ar.T
ar.T()
- 用np的函數的有:
、np.resize()
、按行列求和np.astype()
、np.sum(ar, axis=1)
np.sort()
資料分析—科學計算工具numpy(下)
![]()
資料分析---科學計算工具numpy(上)