Numpy常用操作
1.数组初始化
# 生成特定数组
print(np.array([2, 3], dtype=np.int16)) # shape: (, 2)
print(np.zeros((2, 3))) # shape: (2, 3)
print(np.empty((2, 3))) # shape: (2, 3)
print(np.random.random((2, 3))) # shape: (2, 3)
# 生成均匀分布数组
# arange(最小值,最大值,步长)(左闭右开)
print(np.arange(1, 10, 2)) # [1 3 5 7 9]
# linspace(最小值,最大值,元素数量)
print(np.linspace(1, 10, 2)) # [ 1. 10.]
2.数组基本运算
a = np.arange(4).reshape(2,2) #[[0 1],[2 3]]
b = np.arange(4, 8).reshape(2, 2) #[[4 5],[6 7]]
# '*'矩阵对应位置相乘
print(a*b) #[[ 0 5],[12 21]]
# dot表示矩阵乘法
print(np.dot(a, b)) #[[ 6 7],[26 31]]
# min、max、sum, axis=0表示按列操作,shape的时候消除行
c = np.arange(12).reshape(3,4) #[[ 0 1 2 3], [ 4 5 6 7],[ 8 9 10 11]]
print(c.sum(axis = 0)) #[12 15 18 21] 沿列操作,行数被消除了
print(c.sum(axis = 1)) #[ 6 22 38]
# 一维数组切片
a = np.arange(10)**3
print(a) # [ 0 1 8 27 64 125 216 343 512 729]
print(a[2:5]) # [ 8 27 64]
# equivalent to a[0:6:2] = -1000; a[开始位置, 结束位置, 步长]
a[:6:2] = -10 # [-10 1 -10 27 -10 125 216 343 512 729]
print(a)
print(a[::-1]) # [729 512 343 216 125 -10 27 -10 1 -10], 倒序
# 多维数组
a = np.arange(12).reshape(3, 4) # [[ 0 1 2 3], [ 4 5 6 7], [ 8 9 10 11]]
print(a[:, 0]) # [0 4 8]
print(a[...,0]) # [0 4 8] # …符号表示将所有未指定索引的维度均赋为 :
print(a[-1]) # [ 8 9 10 11]
# 遍历数组的每个元素
for i in a.flat:
print(i)
3.多维数组组合
a = np.array([[0,1],[2,3]]) # [[0 1],[2 3]]
print(a.transpose()) # [[0 2],[1 3]]
b = np.array([[4,5],[6,7]])
# 水平组合
print(np.concatenate((a, b), axis=1)) # [[0 1 4 5], [2 3 6 7]] ,axis = 1,按行操作
# 垂直组合
print(np.concatenate((a, b), axis=0)) # [[0 1],[2 3],[4 5],[6 7]]
4.数组中查找最大/小索引
# # 获取数组中最大的前n个数值的位置索引
import heapq
def getListMaxNumIndex(num_list,topk=3):
'''
获取列表中最大的前n个数值的位置索引
'''
max_num_index=map(num_list.index, heapq.nlargest(topk,num_list))
min_num_index=map(num_list.index, heapq.nsmallest(topk,num_list))
print('max_num_index:',list(max_num_index))
print('min_num_index:',list(min_num_index))
a = [1, 5, 7, 2, 3]
print(getListMaxNumIndex(a, 2))
5.查找符合条件元素索引
# 查找到符合条件元素的索引
a = np.arange(15).reshape(3,5)
print(np.where(a > 8)) # [[1, 2, 2, 2, 2, 2], [4, 0, 1, 2, 3, 4]]
print(np.argwhere(a > 8)) # [[1 4],[2 0],[2 1],[2 2],[2 3],[2 4]]
# 找出满足条件的所有数中,左上角那个数值的索引
tl = np.min(np.where(a > 8), axis = 1)
print(tl) #[1 0]
# 找出满足条件的所有数中,右下角那个数值的索引
br = np.max(np.where(a > 8), axis = 1)
print(br) #[2 4]
6.更改数组维度
参考1: 扩充数组维度
# 增加数组维度
a = np.arange(6).reshape(2, 3) # (2, 3)
b = a[:,:,np.newaxis,np.newaxis]
print(a.shape) # (2, 3, 1, 1)
# 扩充数组维度
a = np.arange(16).reshape(4, 4) # (4, 4)
a = np.expand_dims(a, 0).repeat(3, axis=0) # (3, 4, 4)
# 删除行(axis=0)/列(axis=1)
a = np.arange(16).reshape(4, 4)
b = np.delete(a, 0, axis=1) # 以列维度删除
print(b)