NumPy 基础

本文详细介绍了NumPy库的基本使用,包括数组的创建、索引、运算、形状操作以及随机数生成。内容涵盖加法、乘法、取值、求和、求乘积、最大最小值、排序、转置、连接、生成函数等,并展示了如何进行布尔值操作、计算统计量以及文件读写。此外,还讨论了数组的逻辑运算和随机数模块的使用,最后通过matplotlib进行了简单绘图。
摘要由CSDN通过智能技术生成
import numpy as np

np.__version__
'1.14.3'

ndarray 数组类型

array=[1,2,3,4,5,6]
array
[1, 2, 3, 4, 5, 6]
array=np.array([1,2,3,4,5,6])
type(array)
numpy.ndarray
array+1
array([2, 3, 4, 5, 6, 7])
#加法
array2=array+array
array2
array([ 2,  4,  6,  8, 10, 12])
#乘法
array3=array*array
array3
array([ 1,  4,  9, 16, 25, 36])
#取值
array[0]
1
array[3]
4
array3[0]
1
array3[-1]
36
array3[0:3]
array([1, 4, 9])

shape属性:描述数组每一维度的数量

#数组的形状
array3.shape
(6,)
array4=np.array([[1,2,3,4],[6,7,8,9]])
array4
array([[1, 2, 3, 4],
       [6, 7, 8, 9]])
array4.shape
(2, 4)

dtype属性:描述数组的数据类型

#数据类型
array4.dtype
dtype('int32')
array5=np.array([[1,2,3.3],[4,5,6.6]])
array5
array([[1. , 2. , 3.3],
       [4. , 5. , 6.6]])
array5.dtype
dtype('float64')

size:数组中元素的个数

#数组中元素的个数
array.size
6

ndim:数组维度

#维度
array.ndim
1
array5.ndim
2

fill:数组的填充

array5.fill(3)
array5
array([[3., 3., 3.],
       [3., 3., 3.]])

zeros:创造全0数组

array6=np.zeros(10)
array6
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
array7=np.zeros((3,6))
array7
array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

ones:创造全1数组

array8=np.ones(10)
array8
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

empty:创建一个没有初始化数值的数组

array9=np.empty((2,3,2))  #2行3列数组,每个两个
array9
array([[[1.26571722e-311, 2.81617418e-322],
        [0.00000000e+000, 0.00000000e+000],
        [0.00000000e+000, 2.92966904e-033]],

       [[6.25646211e-091, 4.85407811e-033],
        [8.31416635e-072, 9.50149044e-043],
        [6.48224659e+170, 4.93432906e+257]]])
#构造随机的10个数
random_array=np.random.rand(10)
random_array
array([0.78756154, 0.81028858, 0.45480779, 0.99079478, 0.57853666,
       0.39447223, 0.51847974, 0.05889269, 0.83743346, 0.34482113])

np.arange()

函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是6,步长为1。

参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况:

1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。

2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。

3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
array10 = np.arange(0,100,10) #起点为0,终点为100,步长为10
array10
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

布尔值

array11=np.array([0,1,2,0],dtype=bool)
array11
array([False,  True,  True, False])

NumPy 计算

array=np.array([[1,2,3],[4,5,6]])
array
array([[1, 2, 3],
       [4, 5, 6]])
#求和
np.sum(array)
21
#按行求和:行和行相加(每一行的元素逐个对应相加)
np.sum(array,axis=0)
array([5, 7, 9])
#按列求和:列和列相加
np.sum(array,axis=1)
array([ 6, 15])

注:

axis=0:沿着每一列或行标签执行

axis=1:沿着每一行或列标签执行
array.ndim  #查看维度
2
array
array([[1, 2, 3],
       [4, 5, 6]])

prod:求乘积

#求乘积
array.prod()
720
array.prod(axis=0)  
array([ 4, 10, 18])
array.prod(axis=1)
array([  6, 120])

max/min:求最大最小值

#求最大最小值
array.max()
6
array.min()
1
array.max(axis=0)
array([4, 5, 6])
array.max(axis=1)
array([3, 6])
array.min(axis=0)
array([1, 2, 3])
array.min(axis=1)
array([1, 4])

argmax/argmin:求最大最小索引

#求最大最小索引
array.argmax()
5
array.argmax(axis=0)
array([1, 1, 1], dtype=int64)
array.argmax(axis=1)
array([2, 2], dtype=int64)
array.argmin()
0
array.argmin(axis=0)
array([0, 0, 0], dtype=int64)
array.argmin(axis=1)
array([0, 0], dtype=int64)

mean:求均值

#求均值
array.mean()
3.5
array.mean(axis=0)
array([2.5, 3.5, 4.5])
array.mean(axis=1)
array([2., 5.])

排序

array=np.array([[1,56,98],[21,65,12]])
array
array([[ 1, 56, 98],
       [21, 65, 12]])
#排序
np.sort(array)
array([[ 1, 56, 98],
       [12, 21, 65]])
np.sort(array,axis=0)
array([[ 1, 21, 65],
       [12, 56, 98]])
#默认指定列排序
np.sort(array,axis=1)
array([[ 1, 56, 98],
       [12, 21, 65]])
#返回索引
np.argsort(array)
array([[0, 1, 2],
       [0, 1, 2]], dtype=int64)
np.argsort(array,axis=0)
array([[0, 1, 1],
       [1, 0, 0]], dtype=int64)
np.argsort(array,axis=1)
array([[0, 1, 2],
       [0, 1, 2]], dtype=int64)

数组形状

array.shape
(2, 3)
array
array([[ 1, 56, 98],
       [12, 21, 65]])
array.shape=3,2   #行列互换
array
array([[ 1, 56],
       [98, 12],
       [21, 65]])
array.shape=6
array
array([ 1, 56, 98, 12, 21, 65])
array.shape=1,6
array
array([[ 1, 56, 98, 12, 21, 65]])
array.reshape(1,6)
array([[ 1, 56, 98, 12, 21, 65]])
array.reshape(6,1)
array([[ 1],
       [56],
       [98],
       [12],
       [21],
       [65]])

reshape函数是MATLAB中将指定的矩阵变换成特定维数矩阵一种函数,且矩阵中元素个数不变,函数可以重新调整矩阵的行数、列数、维数。

函数语法为B = reshape(A,size)是指返回一个和A元素相同的n维数组,但是由向量size来决定重构数组维数的大小。

array.shape
(1, 6)
array.ndim
2
# 新增维度
array1 = array[np.newaxis,:]
array1
array([[[ 1, 56, 98, 12, 21, 65]]])
array1.ndim
3
array2 = array[:,np.newaxis,np.newaxis,np.newaxis]
array2
array([[[[[ 1, 56, 98, 12, 21, 65]]]]])
array2.ndim
5
array2.shape
(1, 1, 1, 1, 6)
array3 = array[np.newaxis,:,np.newaxis]
array3
array([[[[ 1, 56, 98, 12, 21, 65]]]])
array3.shape
(1, 1, 1, 6)
#压缩
array2 = array2.squeeze()
array2.shape
(6,)
array2 = array2.reshape(2,3)
array2
array([[ 1, 56, 98],
       [12, 21, 65]])
#数组的转置
array2.T
array([[ 1, 12],
       [56, 21],
       [98, 65]])

数组的连接

array1=np.arange(0,6)
array1
array([0, 1, 2, 3, 4, 5])
array2=np.arange(6,12)
array2
array([ 6,  7,  8,  9, 10, 11])
array3=np.concatenate((array1,array2))
array3
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

数组的生成

np.array([1,2,3])
array([1, 2, 3])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
np.arange(0,10,2,dtype=np.float32)
array([0., 2., 4., 6., 8.], dtype=float32)

linspace:构建等差数列

np.linspace(0,10,10) # 创建等差数列,等距分布0-10之间的10个数,每次增加10/9
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,
        5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])

logspace:构建等比数列

np.logspace(0,9,10)
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,
       1.e+08, 1.e+09])

生成函数

#构造一个全0矩阵
np.zeros(3)
array([0., 0., 0.])
np.zeros((2,3))
array([[0., 0., 0.],
       [0., 0., 0.]])
np.zeros((3,2))
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
np.ones(3)
array([1., 1., 1.])
np.ones((2,3))
array([[1., 1., 1.],
       [1., 1., 1.]])
np.ones((3,2))
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

ndarray 计算

x=np.arange(0,2)
x
array([0, 1])
y=np.arange(4,6)
y
array([4, 5])
x*y
array([0, 5])
np.multiply(x,y)
array([0, 5])
# 矩阵乘法 (点积)
np.dot(x,y)
5
x = np.arange(0,6)
x = x.reshape(2,3)
x
array([[0, 1, 2],
       [3, 4, 5]])
y = np.arange(0,6)
y = x.reshape(3,2)
y
array([[0, 1],
       [2, 3],
       [4, 5]])
np.dot(x,y)  #(2,3)*(3,2)=(2,2)
array([[10, 13],
       [28, 40]])
x=np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.random.shuffle(x)   #随机打乱顺序
x
array([4, 5, 3, 1, 2, 8, 7, 6, 9, 0])

数组的比较

x = np.array([1,2,3])
y = np.array([1,2,2])
x==y #对应元素逐个相比较
array([ True,  True, False])
# 逻辑与   
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_and(x,y)
array([False, False,  True])
# 逻辑或   
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_or(x,y)
array([ True,  True,  True])
# 逻辑非 
x = np.array([1,0,2])
y = np.array([0,1,2])
np.logical_not(x,y)
array([0, 1, 0])

随机模块 np.random

np.random.rand(2,3)
array([[0.63487633, 0.59668801, 0.15900207],
       [0.80550753, 0.92506804, 0.76315239]])
np.random.randint(5,10,size=(2,3))  #用于生成指定范围内的整数
array([[6, 5, 5],
       [9, 9, 5]])
# 随机数种子
np.random.seed(0)     #使得随机数可预测
np.random.randint(5,10,size=(2,3))
array([[9, 5, 8],
       [8, 8, 6]])
# 固定的随机数
np.random.seed(0) 
np.random.random_sample()
0.5488135039273248
# 获得标准正态分布的一组数
mu , sigma = 0 , 0.1
nor = np.random.normal(mu,sigma,100)
nor
array([ 0.07415917,  0.15529137, -0.22683282,  0.13335454, -0.08427241,
        0.19699244,  0.12661185, -0.05058765,  0.25452008,  0.10808119,
        0.04843122,  0.05791405, -0.01815826,  0.14102046, -0.03744717,
        0.02751983, -0.09607546,  0.0376927 ,  0.00334389,  0.06805672,
       -0.15634967, -0.05666976, -0.02421495,  0.15143913, -0.03330574,
        0.00473648,  0.14627404,  0.15350291,  0.056644  ,  0.01492651,
       -0.1078278 ,  0.13954723,  0.1787484 , -0.05695173,  0.01753865,
       -0.04625055, -0.10858006,  0.0639736 , -0.03858633, -0.07757624,
        0.09957113, -0.19332048,  0.02485306, -0.00312453, -0.0139474 ,
       -0.0190656 ,  0.04486375, -0.09924298, -0.02259397, -0.16545708,
       -0.06397226, -0.04794198,  0.03113635, -0.07760205, -0.03073648,
       -0.03665239,  0.1119712 , -0.04579224,  0.04253934, -0.00279712,
        0.14759898,  0.06467801, -0.03643343, -0.06787774, -0.03536279,
       -0.07407475, -0.06750218, -0.01327843,  0.06198011,  0.17911685,
        0.01710004, -0.17256714,  0.01606585, -0.08589853, -0.02064209,
        0.04884265, -0.0838331 ,  0.03811637, -0.09909033,  0.101788  ,
        0.03415874, -0.12508862,  0.09252508, -0.09047862,  0.18436915,
        0.15255072, -0.14455356,  0.03771606, -0.00705572,  0.06041597,
        0.0472149 ,  0.08199173,  0.09075196, -0.05858229,  0.09375588,
       -0.02546081,  0.09735987,  0.02072828,  0.1099642 ,  0.0939897 ])

matplotlib画图

pip install matplotlib

import matplotlib.pyplot as plt
plt.plot(np.arange(100),nor,'ro-')
plt.show
<function matplotlib.pyplot.show(*args, **kw)>

在这里插入图片描述

a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.random.shuffle(a) # 洗牌
a
array([2, 7, 9, 4, 0, 1, 3, 8, 5, 6])

文件读写

%%writefile test2.txt  
1,2,3,4,5,6 
2,3,5,8,9,10
Writing test2.txt
np.loadtxt('test2.txt',delimiter=',')      # delimiter 分隔符定义
array([[ 1.,  2.,  3.,  4.,  5.,  6.],
       [ 2.,  3.,  5.,  8.,  9., 10.]])
x = np.arange(10)
x = x.reshape(2,5)

y = np.arange(10,20)
y = y.reshape(2,5)
x,y
(array([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]]), array([[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]]))
# 保存
np.savetxt('test.txt',x)
np.loadtxt('test.txt')
array([[0., 1., 2., 3., 4.],
       [5., 6., 7., 8., 9.]])
# npy
np.save('test.npy',x) # 写入
np.load('test.npy')  # 读取
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
# 通过npz格式可以压缩存储多个npy文件
np.savez('test.npz',a=x,b=y)
# 读取npz文件
data = np.load('test.npz')
data.files #获取文件
['a', 'b']
data['a']
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
data['b']
array([[10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值