Python之Numpy常用操作

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值