python 库之numpy使用

python 库之numpy使用(学习笔记)

概述

import numpy as np
array1 = np.array([1,2,3,4,5])
array2 = array +1
array2
# array([2, 3, 4, 5, 6])
array1 + array2
# array([3, 5, 7, 9, 11])
array1 * array2
# array([2, 6, 12, 20, 30])
type(array1)
#numpy.ndarray

Array数组

import numpy as np
yu_list = [1,2,3,4,5]
yu_array = np.array(yu_list)
yu_array.dtype
# int32
yu_list = [1,2,3,4,5.0]
#float 64
#array中的数组数据类型应保持一致,其他元素也被自动(向下转化)转化成float类型,若其中一个为字符串,如‘5’,那么其他元素也会被调整为‘1’,‘2’等,同一数据类型便于底层计算的高效性。
yu_array.itemsize # 一个数组元素的字节长度 8
yu_array.shape #(5,)
yu_array.size #元素数 5
yu_array.ndim # 维度 1
yu_array.fill(0) # array([0,0,0,0,0])
#索引与切片,与python一样
yu_array[0] # 1
yu_array[1:3] # array([2,3,4])
yu_array[-2:] # array([4,5])

数组结构

yu_array = np.array([[1,2,3],
                      [4,5,6],
                      [7,8,9]])
#取5
yu_array[1,1] #从0计数
#赋值
yu_array[1,1] = 10
yu_array
# array([[1,2,3],
#        [4,10,6],
#        [7,8,9]])
#取某一行
yu_array[1]
#array([4,10,6])
#取某一列
yu_array[:,1]
#array([2,10,8])
#取某一行的两个值
yu_array[1,0:2] # 0 1
#array([4,10])
#防止更改原数组,修改yu_array2也不会改变原来yu_array的值
yu_array2 = yu_array.copy()
#arange构造等差数组
yu_array = np.arange(0,100,10)
# array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
#用bool选出符合特定要求的元素
ran_array = np.random.rand(10)
mask = ran_array>0.5 # array([ True,  True, False, False, False,  True, False,  True, False,
       False])
#bool作为索引
mask = np.array([0,0,0,1,1,1,0,0,1,1],dtype=bool)
yu_array[mask]
--> array([30, 40, 50, 80, 90])
#where
yu_array = np.array([10,20,30,40,50])
np.where(yu_array>30)
--> (array([3, 4]),) #位置
yu_array[np.where(yu_array>30)]
--> array([40, 50])
#指定数组类型
yu_array = np.array([1,2,3,4,5]
yu_array = np.array([1,2,3,4,5],dtype = np.float32) #float64也行,但是float32更省空间
yu_array.nbytes #20 占用的字节数 float32下每个占4个字节
#或者
np.asarray(yu_array,dtype = np.float32) #但asarray不会改变原来的yu_array,而是赋给了一个新的数组
#或者
yu_array.astype(np.float32)#不会改变原来的yu_array,而是赋给了一个新的数组

数组的数值运算

import numpy as np
yu_array = np.array([[1,2,3],[4,5,6]])
#加法
np.sum(yu_array) # 或者 yu_array.sum() 对数组求和 =21
yu_array.ndim # 数组有多少个维度 = 2
np.sum(yu_array,axis = 0) # 或者 yu_array.sum(axis = 0)按照axis = 0(列),axis = 1(行)的维度求和=array([5, 7, 9]),array([ 6, 15]),axis=-1相当于最后一个维度
#乘积
yu_array.prod() # 720
yu_array.prod(axis = 0) # array([ 4, 10, 18])
#最小值
yu_array.min() # 1
yu_array.min(axis = 0) # array([1, 2, 3])
#最大值 
yu_array.max() # 6
#求索引位置
yu_array.argmin() # 0
yu_array.argmax() # 5
yu_array.argmin(axis = 0) # array([0, 0, 0])
#求均值
yu_array.mean() #3.5
yu_array.mean(axis=0) # array([2.5, 3.5, 4.5])
#求标准差
yu_array.std() # 1.707825127659933
#求方差
yu_array.var()# 2.9166666666666665
#限制 
yu_array.clip(2,4) # 小于2的变为2 大于4的变为4
#array([[2, 2, 3],
#       [4, 4, 4]])
#四舍五入
yu_array = np.array([[1.7,2.3,3.8],[4.2,5,6.5]])
yu_array.round()
#array([[2., 2., 4.],
#      [4., 5., 6.]])
yu_array = np.array([[1.71,2.36,3.89],[4.21,5.68,6.53]])
yu_array.round(decimals=1) # 精度设置,保留到小数点后一位
#array([[1.7, 2.4, 3.9],
#       [4.2, 5.7, 6.5]])

排序操作

import numpy as np
yu_array = np.array([[1.6,1.5,2.5],[3.4,1.8,7.6]])
np.sort(yu_array)  # yu_array.sort(),默认用最后一个维度排序
# array([[1.5, 1.6, 2.5],
#       [1.8, 3.4, 7.6]])
np.sort(yu_array,axis =0)
#array([[1.6, 1.5, 2.5],
#       [3.4, 1.8, 7.6]])
np.argsort(yu_array) #排序索引值
#array([[1, 0, 2],
#      [1, 0, 2]])

#向数组中插入某个数值,自动插到排序好的数
yu_array = np.linspace(0,10,10) #构造一个数组,在0-10之间插入十个数
#array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
#     5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])
values = np.array([2.5,3.5,9.5]) #指定插入的数值
np.searchsorted(yu_array,values) #将values插入到的位置的索引值
# array([3, 4, 9])

#第三列升序,第二列按照第三列降序
yu_array = np.array([[1,0,6],[2,0,1],[1,7,3],[3,2,1]])
'''
array([[1, 0, 6],
       [2, 0, 1],
       [1, 7, 3],
       [3, 2, 1]])
'''
index = np.lexsort([-1*yu_array[:,0],yu_array[:,2]]) #获得索引值
#array([3, 1, 2, 0])
yu_array[index]
'''
array([[3, 2, 1],
       [2, 0, 1],
       [1, 7, 3],
       [1, 0, 6]])
'''

数组形状操作

import numpy as np
yu_array = np.arange(10)
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#转化为二维数组
yu_array.shape = 2,5 #  yu_array = yu_array.reshape(2,5) 行列乘积=元素数量
#array([[0, 1, 2, 3, 4],
#       [5, 6, 7, 8, 9]])
#增加维度
yu_array = np.arange(10)
yu_array.shape # (10,)
yu_array = yu_array[np.newaxis,np.newaxis,:]
yu_array.shape # (1,1, 10) 
#压缩维度
yu_array = yu_array.squeeze()
yu_array.shape # (10,) 将空的维度去掉
#数组转置
yu_array = np.arange(10)
yu_array = yu_array.reshape(2,5)
yu_array.transpose() # 或者yu_array.T,yu_array本身不变,变为5行2列
'''
array([[0, 5],
       [1, 6],
       [2, 7],
       [3, 8],
       [4, 9]])
'''
#数组的连接
a =  np.array([[12,34,56],[78,99,90]])
b =  np.array([[2,4,6],[8,9,0]])
np.concatenate((a,b)) #必须以元组的形式封装两个数组
b =  np.array([[2,4,6],[8,9,0]])
np.concatenate((a,b)) #axis默认为0,拼接到下方必须以元组的形式封装两个数组
# np.vstack((a,b)) vertical 
'''
array([[12, 34, 56],
       [78, 99, 90],
       [ 2,  4,  6],
       [ 8,  9,  0]])
'''
np.concatenate((a,b),axis=1) #拼接到右侧,必须以元组的形式封装两个数组
#np.hstack((a,b)) horizontal
'''
array([[12, 34, 56,  2,  4,  6],
       [78, 99, 90,  8,  9,  0]])
'''
#拉平
a =  np.array([[12,34,56],[78,99,90]])
a.flatten()
# a.ravel()
# array([12, 34, 56, 78, 99, 90])

数组生成函数

import numpy as np
#构造数组
#arange方法
np.arange(2,20,2,dtype = np.float32)#2到20,间隔为2
#array([ 2.,  4.,  6.,  8., 10., 12., 14., 16., 18.], dtype=float32)
#linspace方法
np.linspace(0,50,10) #0到50之间构造100个等距数,头尾都包含
'''
array([ 0.        ,  5.55555556, 11.11111111, 16.66666667, 22.22222222,
       27.77777778, 33.33333333, 38.88888889, 44.44444444, 50.        ])
'''
#logspace方法
np.logspace(0,1,5) #logspace默认以10为底 log(1) = 0;log(10)=1
# array([ 1.        ,  1.77827941,  3.16227766,  5.62341325, 10.        ])
#网格索引
x = np.linspace(-10,10,5,dtype=int)
y = np.linspace(-10,10,5,dtype=int)
x,y = np.meshgrid(x,y)
x
'''
array([[-10.,  -5.,   0.,   5.,  10.],
       [-10.,  -5.,   0.,   5.,  10.],
       [-10.,  -5.,   0.,   5.,  10.],
       [-10.,  -5.,   0.,   5.,  10.],
       [-10.,  -5.,   0.,   5.,  10.]])
'''
y
'''
array([[-10, -10, -10, -10, -10],
       [ -5,  -5,  -5,  -5,  -5],
       [  0,   0,   0,   0,   0],
       [  5,   5,   5,   5,   5],
       [ 10,  10,  10,  10,  10]])
'''
#构造行向量
np.r_[0:10:1]
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#构造列向量
np.c_[0:10:1]
'''
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])
'''
##常用生成函数
#构造零向量
#常用方法
np.zeros((3,4),dtype=int)
'''
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
'''
#zeros_like方法
yu_array = np.array([1,2,3,4])
yu_array = np.zeros_like(yu_array) #传入都是yu_array的维度
#array([0, 0, 0, 0])

#构造1向量
#常用方法
np.ones((3,4),dtype=int)
'''
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
'''
np.ones((3,4),dtype=int) * 5
'''
array([[5, 5, 5, 5],
       [5, 5, 5, 5],
       [5, 5, 5, 5]])
'''
#empty方法
x = np.empty(5) #构造一个空的数组,初始随机填入值
#array([ 2.,  4.,  6.,  8., 10., 12., 14., 16., 18.], dtype=float32)
x.shape
#(5,)
x.fill(1)
#array([1., 1., 1., 1., 1.])

#ones_like方法
yu_array = np.array([1,2,3,4])
yu_array = np.ones_like(yu_array) #传入都是yu_array的维度
#array([1, 1, 1, 1])

#生成单位矩阵
np.identity(5)
'''
array([[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.]])
'''

四则运算

import numpy as np
#数组乘法——对应位置相乘
x = np.array([5,3])
x = np.array([2,3])
np.multiply(x,y)
#array([10,  9])
x = np.array([[5,3],[6,7]])
y = np.array([[2,3],[5,9]])
np.multiply(x,y)
'''
array([[10,  9],
       [30, 63]])
'''
#数组乘法——矩阵乘法
x = np.array([[5,3],[6,7]])
y = np.array([[2,3],[5,9]])
np.dot(x,y)
'''
array([[25, 42],
       [47, 81]])
'''
np.dot(y,x)
'''
array([[28, 27],
       [79, 78]])
'''
#比较对应元素是否相同
x = np.arange(5)
y = np.array([1,1,2,4,4])
x == y
# array([False,  True,  True, False,  True])
#逻辑与操作
x = np.array([0,1,2,3,0])
y = np.array([0,1,2,4,4])
np.logical_and(x,y)
# array([False,  True,  True,  True, False])
np.logical_or(x,y)
#array([False,  True,  True,  True,  True])
np.logical_xor(x,y) #同真同假为False,不同为True
# array([False, False,  True, False,  True])
x = np.array([0,1,4,4,0])
y = np.array([1,1,0,1,4])
np.logical_not(x,y) # not(x) and y
# array([1, 0, 0, 0, 1])

随机模块

import numpy as np
#所有的值都是由0到1
#rand方法
np.random.rand(3,2) #三行两列
#random_sample
np.random.random_sample((3,2))

'''
array([[0.23897124, 0.50091748],
       [0.31752995, 0.53164724],
       [0.19966394, 0.72266036]])
'''
#返回随机的整数,左闭右开
np.random.randint(10,size=(3,2))
'''
array([[9, 5],
       [8, 9],
       [8, 2]])
'''
np.random.randint(0,10,3) #0到10之间随机取三个数
# array([5, 7, 6])
#构造随机的高斯分布
mu,sigma = 0,0.1 #均值为0,标准差为0.1
np.random.normal(mu,sigma,10)
'''
array([ 0.01262138, -0.00472471, -0.05136768, -0.17169898,  0.06712731,
       -0.11910324, -0.03256319, -0.09062116, -0.0936965 , -0.12636623])
'''
#保留小数点后n位
np.set_printoptions(precision=2)
mu,sigma = 0,0.1
np.random.normal(mu,sigma,10)
'''
array([ 0.02,  0.11, -0.08,  0.28, -0.11,  0.06, -0.08, -0.29, -0.13,
        0.06])
'''
#洗牌,打乱顺序
yu_array = np.arange(10)
np.random.shuffle(yu_array)
yu_array
# array([0, 7, 9, 3, 8, 4, 2, 6, 5, 1])
#随机种子,保证随机按照固定的模式进行,结果不会改变
np.random.seed(0)
np.set_printoptions(precision=2)
mu,sigma = 0,0.1
np.random.normal(mu,sigma,10)
'''
array([ 0.18,  0.04,  0.1 ,  0.22,  0.19, -0.1 ,  0.1 , -0.02, -0.01,
        0.04])
'''

文件读写

#读取普通方式
data = []
with open('yu.txt') as f:
    for line in f.readlines():
        fileds  = line.split()
        cur_data = [float(x) for x in fileds]
        data.append(cur_data)
data = np.array(data)
# array([[ 2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]])
#读取——numpy方法
data = np.loadtxt('yu.txt')
#指定分隔符
%%writefile liu.txt
1,2,3,4
2,3,4,5
data = np.loadtxt('liu.txt', delimiter=',') 
# array([1., 2., 3., 4.])
#跳过某行 skiprows=()
%%writefile liu1.txt
1,2,3,4
2,3,4,5
7,8,9,0
3,4,6,9
1,3,5,6
data = np.loadtxt('liu1.txt', delimiter=',',skiprows=4) 
#array([1., 3., 5., 6.])
#使用某几列 usecols=(0,1,2)
np.loadtxt('liu1.txt', delimiter=',',usecols=(0,1,2)) 
'''
array([[1., 2., 3.],
       [2., 3., 4.],
       [7., 8., 9.],
       [3., 4., 6.],
       [1., 3., 5.]])
'''

数组保存

import numpy as np
yu_array = np.array([[1,2,3],[4,5,6]])
np.savetxt('yu1.txt',yu_array, fmt='%d',delimiter=',') #fmt格式为整数,%.2f 小数点后两位;分隔符为逗号

在这里插入图片描述

#读写array结构
yu_array = np.array([[1,2,3],[4,5,6]])
np.save('yu_array.npy',yu_array)
np.load('yu_array.npy')
'''
array([[1, 2, 3],
       [4, 5, 6]])
'''
#多个数组结构保存在同一位置
yu_array1 = np.array([[1,2,3],[4,5,6]])
yu_array2 = np.arange(10)
np.savez('ming.npz',a = yu_array1,b = yu_array2)
data= np.load('ming.npz')
data['a']
'''
array([[1, 2, 3],
       [4, 5, 6]])
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值