什麼是NumPy
NumPy是高性能的科學計算和數據分析基礎包
導入
import numpy as np
多維數組ndarray
創建一維數組
data = [1, 2, 3, 4]
arr = np.array(data)
print(arr)
[1 2 3 4]
創建多維數組
data = [1, 2, 3, 4]
data1 = [data, data]
arr = np.array(data1)
print(arr)
[[1 2 3 4]
[1 2 3 4]]
快速初始化創建數組
全0數組
data = np.zeros((2, 4))
print(data)
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
全1數組
data = np.ones((2, 4))
print(data)
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
等差數列
方法一
data = np.arange(1, 10, 2) #1-10之間獲取差爲2的等差數列,不包含 終止值(10)
print(data)
[1 3 5 7 9]
方法二
data = np.linspace(1, 10, 6) #1-10之間獲取6個元素,它們構成的等差數列,默認包含終止值(10)
print(data)
[ 1. 2.8 4.6 6.4 8.2 10. ]
數組類型
常用的類型有float,int,bool,string,unicode
arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_unicode = np.array(['北京', '天津11'])
print(arr_int.dtype, arr_float.dtype, arr_unicode.dtype)
int32 float64 <U4
類型互轉
arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_int_to_float = arr_int.astype(np.float64)
arr_float_to_int = arr_float.astype(np.int32)
print(arr_int_to_float,arr_float_to_int)
[ 1. 2. 3.] [1 2 3] # 注:float轉int後小數點會消失
數組的存儲類型和如何存儲的詳細可以參考: https://blog.csdn.net/pipisorry/article/details/39215089#commentBox
數據索引和切片
獲取第2行數據
data[1]
[4 5 6]
獲取第2列數據
data[:,1]
[2 5 8]
獲取第1行第2列數據
data[0,1]
2
獲取前兩行數據
data[:2]
[[1 2 3]
[4 5 6]]
獲取第一列以後的數據
data[:,1:]
[[2 3]
[5 6]
[8 9]]
獲取倒數兩行數據
data[-2:]
[[4 5 6]
[7 8 9]]
數組賦值
對第二行和第二列內的元素統一賦值成0
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
data[:2,:2] = 0
print(data)
[[0 0 3]
[0 0 6]
[7 8 9]]
若不想改變源數組的值,可以使用copy進行賦值,涉及到淺拷貝和深拷貝的區別參考 https://www.cnblogs.com/xiaxiaoxu/p/9742452.html
以上簡單分片的示例,詳細可以參考 https://www.jianshu.com/p/15715d6f4dad
基本運算
相加
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1+arr2
print(arr)
[[ 3 4 5]
[ 7 8 9]
[11 12 13]]
相乘
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1*arr2
print(arr)
[[ 2 4 6]
[12 15 18]
[28 32 36]]
數值乘
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1*10
print(arr)
[[10 20 30]
[40 50 60]
[70 80 90]]
根號
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1**0.5
print(arr)
[[ 1. 1.41421356 1.73205081]
[ 2. 2.23606798 2.44948974]
[ 2.64575131 2.82842712 3. ]]
常用的統計函數見下表
隨機數
示例
import numpy.random as npr
import matplotlib.pyplot as plt
size = 1000
rn1 = npr.rand(size, 2)
rn2 = npr.randn(size)
rn3 = npr.randint(0, 10, size)
rang = [0, 1, 2, 3, 4, 5]
rn4 = npr.choice(rang, size=size)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))
ax1.hist(rn1, bins=25, stacked=True)
ax1.set_title('rand')
ax1.set_ylabel('frequency')
ax1.grid(True)
ax2.hist(rn2, bins=25, stacked=True)
ax2.set_title('randn')
ax2.grid(True)
ax3.hist(rn3, bins=25, stacked=True)
ax3.set_title('randint')
ax3.set_ylabel('frequency')
ax3.grid(True)
ax4.hist(rn4, bins=25, stacked=True)
ax4.set_title('choice')
ax4.grid(True)
plt.show()