Numpy基础使用1


前言

Numpy官网函数查询
NumPy是Python中用于科学计算的一个基础包,它提供高效的N维数组操作和数学函数库

下载Numpy包

pip install numpy 
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

上面是使用pip从官方下载numpy包
下面是使用pip从清华源下载numpy包
点击了解更多pip命令行使用

导入Numpy包

import numpy as np           //导入numpy包,令其名称为np

一、创建Numpy数组

在numpy中数组即为ndarray对象,全称numpy multidimensional array 即numpy多维数组
在numpy中的类型是numpy.ndarray
常使用numpy.array()创建数组

1.创建特殊ndarray

创建全为0的数组
numpy.zeros()

import numpy as np
a=np.zeros([5])              #一维可以简写成np.zeros(5)来创建
b=np.zeros([8,2])            
c=np.zeros([3,4,5])
print(a)
print(b)
print(c)

在这里插入图片描述
创建全为一的数组

使用np.ones(),与zeros()相同操作

numpy.eye()

用法:

numpy.eye(N,M,K,dtype,order)

作用:

创建一个对角线上为1其余为0的数组

参数:

N输出的行数
M输出的列数 默认为none
K对角线的偏移量 默认为0,创建的数组即位单位数组
dtype该数组的值的类型 默认为float
order以什么(C,F)形式存储在内存中 默认为c语言形式

返回值:

返回一个(N,M)的对角线上是1其余是0的数组。

示例:

import numpy as np
a=np.eye(3)                   
b=np.eye(3,3,0)               #生成3*3矩阵,主对角线为1,其余为0
c=np.eye(3,3,1)               #生成3*3矩阵,主对角线向右偏移一位开始为1,其余为0
d=np.eye(3,4,0)               #生成3*4矩阵,从首行首位开始对角线为1,其余为0
print(a)
print("\n")
print(b)
print("\n")
print(c)
print("\n")
print(d)

在这里插入图片描述

2.转化创建ndarray

import numpy as np
a=[1,2,3]                #创建一个列表a
b=(1,2,3)                #创建一个元组b
c={1,2,3}                #创建一个集合c


arr1=np.array(a)
arr2=np.array(b)          
arr3=np.array(c)          #全部转化为数组


#打印转化前的类型和转化后的类型
print(type(a))
print(arr1)
print(type(arr1))
print('\n')

print(type(b))
print(arr2)
print(type(arr2))
print('\n')

print(type(c))
print(arr3)
print(type(arr3))
print('\n')

在这里插入图片描述

注意第三个转化中,集合转化为数组,会将整个集合作为数组的第一个元素;
类型依旧为<class ‘numpy.ndarray’>;
数组在输出一个元素时会直接输出,不会加[],因为将它整个集合视作了ndarray的一个元素;

在这里插入图片描述
那假如我们需要将集合中的元素作为一个个单独的int型的ndarray,一般会将其转化为list类型,然后再转成ndarray.

转载参考:如何将python集合转换为numpy数组? | 码农家园 (codenong.com)

注意:可以利用集合中元素的唯一性,将数据转化为集合形式,去除重复的数据。

3.创建随机数组

在numpy中创建随机数组的方式有两种,一种是使用random库直接创建,另一种是使用Generator生成器创建

1.使用numpy.random库直接创建

randint()

用法:

numpy.random.randint(low,hegh,size)

作用:

randint()会随机low到high的整数,左闭右开。

参数:

low随机数能取的最小的整数
high随机数能取的最大数的上限不能大于等于
size数组大小

seed()

用法:

numpy.random.seed(seed)

作用:

设置随机数种子

参数:

seed随机数种子

示例:

在这里插入图片描述

2.使用generator创建

用该方法生成随机数,设置随机数的方式不一样。
default_rng()

用法:

numpy.random.default_rng(seed)

作用:

设置随机数种子便于复现结果

参数:

seed 设置的种子
rng random number genertors(随机数生成器)

示例:

该函数会返回一个名为Generator(生成器)的对象。

在这里插入图片描述

该生成器对象可以调用random等函数,并且生成的随机数在固定种子下是固定的,即使不同时间不同设备也可以复现相同的数据

在这里插入图片描述

random()
用法:

generator.random(size) #或者使用np.random.random(size)一样效果

作用:

random()函数的作用是随机0-1的浮点数

参数:

size是数组大小

示例:

import numpy as np
x=np.random.default_rng(200)          #固定了生成器种子为200,便于复现相同结果
z=x.random([3,5])
y=x.random(10)
print(z)
print("\n")
print(y)

在这里插入图片描述




在后续学习中会经常碰到axis这个参数,在此详细叙述一番

axis轴,复数形式axes。
numpy中的函数,axis该参数常常用来表示沿着哪个轴的方向。

在这里插入图片描述
通过此图不难发现,增加数组维度,原始维度的方向axis+1,新增维度为axis=0。

一维数组中按axis=0的方向切割就会切割出一些列“点”。
二维数组中按axis=0的方向切割就会切割出一系列的“行”。
三维数组中按axis=0的方向切割就会切割出一系列的面对我们的“面”。

numpy中有三个转换轴顺序的函数:

moveaxis()

用法:

numpy.moveaxis(a,source,destiantion)

作用:

会将source轴索引和destiantion轴索引的两条轴交换位置,然后按原先顺序往前或往后补

参数:

a 需要变换轴的数组
source 源轴索引
destiantion 目标轴索引
在这里插入图片描述

返回值:

返回轴变换后的数组

示例:

import numpy as np
x = np.zeros((3, 4, 5))
print(np.moveaxis(x, 0,-1).shape)
#source=0是值为3的轴,destaintion=-1是值为5的轴,将3往后移到5的位置,4,5按序往前移 
           
print(np.moveaxis(x,1,-1).shape)
#source=1是值为4的轴,destaintion=-1是值为5的轴,将4往后移到5的位置,5按序往前移 

print(np.moveaxis(x,-1,-3).shape)
#source=-1是值为5的轴,destaintion=-3是值为3的轴,将5往前移到3的位置,3,4按序往后移 

在这里插入图片描述

注意:
如果选取了[-n,n)左闭右开区间以外的值作为索引参数会报以下错误
在这里插入图片描述




rollaxis()

用法:

numpy.rollaxis(a,axis,start)

作用:

将已有的轴变换位置,插入到两轴之间,后一个参数是具体那两个轴之间,它从开始的轴前开始排了一个轴之间的序列

参数:

a要变换轴的数组
axis选择要滚动插入的轴(axis轴参数就是从0至n索引)
start插入的位置
在这里插入图片描述

返回值:

变换插入轴后数组

示例:

import numpy as np
a = np.ones((3,4,5))
print(np.rollaxis(a,0,2).shape)
#axis=0是值为3的轴,start=2根据上图可知是在值为4,5轴之间

print(np.rollaxis(a,-1,-3).shape) 
#axis=-1是值为5的轴,start=-3根据上图可知是在值为3的前面

print(np.rollaxis(a,0,3).shape)
#axis=0是值为3的轴,start=3根据上图可知是在值为5的后面

在这里插入图片描述

注意:
如果n为原数组维度,start参数在[-n,n]之外则会引发下类报错:
在这里插入图片描述




swapaxes()

用法:

numpy.swapaxes(a,axis1,axis2)

作用:

交换两个轴位置

参数:

a要进行变换的数组
axis1交换的轴1
axis2交换的轴2

返回值:

返回交换轴后的数组

示例:

import numpy as np
x = np.zeros((3, 4, 5))
print(np.swapaxes(x, 1,-3).shape)
#axis1=1是值为4的轴,axis2=-3是值为3的轴.直接将3和4轴位置调换

print(np.swapaxes(x, -1,-3).shape)      
#axis1=-1是值为5的轴,axis2=-3是值为3的轴.直接将3和5轴位置调换

print(np.swapaxes(x, 0,-2).shape)
#axis1=-0是值为3的轴,axis2=-2是值为4的轴.直接将3和4轴位置调换

在这里插入图片描述







随机样本

choice()
用法:

generator.choice(a,size,replace,p,axis)

作用:

从给定数组生成随机数组

参数:

a可以是ndarray类型也可以是int类型,如果是ndarray则从中抽样,如果是int类型则先调用arange(int n)生成[0,n)的值然后再抽样。
size输出的抽样的数组形状
replace是否可以多次抽样a 默认值是True
p数组中的各个值的概率 默认平均概率 p=none
axis数组的轴 axis=0 (0是取行,1是取列)

返回值:

返回生成的随机样本

示例:
1.

import numpy as np

x=np.random.default_rng()      #设置生成器
a=np.arange(6)
b=x.choice(a,3)                   #在生成器中调用choice()进行选择
print(b)

在这里插入图片描述

2.

import numpy as np

x=np.random.default_rng()      #设置生成器
a1=[[1,2,3],[4,5,6],[7,8,9]]
a2=[1,2,3,4,5,6,7,8,9]

b=x.choice(a1,1)                        #从a1中随机选1个行
print(b)

c=x.choice(a1,[2,2])                      #从a1中随机选4个行,组成2*2的矩阵
print(c)

d=x.choice(a1,1,axis=1)                   #从a1中随机选一个列
print(d)

e=x.choice(a2,5,p=[0,0,0,0,0,0,0,0,1])           #a2中的概率被设置成9的概率为1,所有只能抽出5个9      
print(e)

在这里插入图片描述




shuffle()
用法:

generator.shuffle(x,axis)

作用:

随机打乱原数组,在原有数组上‘洗牌’。不会创建新数组。

参数:

x 原数组
axis 打乱的轴

返回值:

none

示例:

import numpy as np
y=np.random.default_rng()
x=np.array([[1,2,3,4,5],[6,7,8,9,10]])
y.shuffle(x,axis=0)      #按行随机打乱,总共两行,行内顺序不会被打乱(左右对应的顺序与原数组相同)
print(x)
print("\n")
y.shuffle(x,axis=1)        #按列随机打乱,总共5列,列内顺序不会被打乱(上下对应的顺序与原数组相同)
print(x)

在这里插入图片描述




permutation()
用法:

generator.permutation(x,axis)

作用:

随机打乱原有数组,但是会生成新的数组

参数:

x如果是ndarray则随机打乱洗牌,如果是int类型则先调用arange(x)生成[0,x)再打乱随机洗牌
axis要打乱的数组的轴

返回值:

随机打乱置换后的新数组

示例:

import numpy as np
y=np.random.default_rng()
x=np.array([[1,2,3,4,5],[6,7,8,9,10]])
z=y.permutation(x,axis=0)      #按行随机打乱,总共两行,行内顺序不会被打乱(左右对应的顺序与原数组相同)
print(z)

print("\n")

z=y.permutation(x,axis=1)     #按列随机打乱,总共5列,列内顺序不会被打乱(上下对应的顺序与原数组相同)
print(z)

在这里插入图片描述



permutation与shuffle的作用效果完全相同,只是permutation有返回值,shuffle没有返回值。
2.1版本还有个permuted既可以有返回,也可以无返回值。




binomial()
二项分布抽样
在这里插入图片描述

用法:

geneator.binomial(n,p,size)

作用:

生成二项分布形状的随机数
参数:
n是测试的次数
p独立单次测试成功的概率
size输出的数组形状

示例:

import numpy as np
import matplotlib.pyplot as plt
d=np.random.default_rng(20100)         #设置种子
c=d.binomial(2000,0.3,2000)

print(c)

weights=np.ones_like(c)/float(len(c))
plt.hist(c,20,weights=weights)        #这里将输出的2000个数值聚集成20个来做图方便观看验证
plt.show()

在这里插入图片描述




exponenetial()
指数分布抽样
在这里插入图片描述

用法:

exponenetial(scale,size)

作用:

生成指数分布形状的随机数

参数:

scale B值
size输出数组的形状

示例:

import numpy as np
import matplotlib.pyplot as plt
d=np.random.default_rng(20100)         #设置种子
c=d.exponential(0.3,2000)

print(c)

weights=np.ones_like(c)/float(len(c))
plt.hist(c,20,weights=weights)        #这里将输出的2000个数值聚集成20个来做图方便观看验证
plt.show()

在这里插入图片描述




beta()
beta分布抽样
在这里插入图片描述
在这里插入图片描述

用法:

generator.beta(a,b,size)

作用:

生成beta形状的随机数

参数:

a Alpha值
b Beta值
size

示例:

import numpy as np
import matplotlib.pyplot as plt
d=np.random.default_rng(100)         #设置种子
c=d.beta(2,4,2000)

print(c)

weights=np.ones_like(c)/float(len(c))
plt.hist(c,20,weights=weights)        #这里将输出的2000个数值聚集成20个来做图方便观看验证
plt.show()

在这里插入图片描述




normal()
高斯分布(正态分布):
在这里插入图片描述

用法:

genertor.normal(loc,scale,size) #也可以使用numpy.random.RandomState(loc,scale,size)

作用:

生成高斯分布形状的随机数

参数:

loc 是高斯分布的平均值,中心那条线,即是高斯函数中的μ值
scale 规模(高斯函数宽度),即是高斯函数中的σ值
size 数组大小

示例:

import numpy as np
import matplotlib.pyplot as plt
d=np.random.default_rng(20100)         #设置种子
c=d.normal(2,0.1,2000)

print(c)

weights=np.ones_like(c)/float(len(c))
plt.hist(c,20,weights=weights)        #这里将输出的2000个数值聚集成20个来做图方便观看验证
plt.show()

下面输出的是他的x轴坐标,他的x轴上对应的每20段对应的y值相加等于1
在这里插入图片描述

二、基础操作

运算

加减乘除
形状大小相同的数组可以完成一一对应的加减乘除

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b=np.array([[4,5,6],[7,8,9],[10,11,12]])

print(a+b)
print(a*b)
print(a-b)
print(a/b)

在这里插入图片描述

当形状不一致时,如果某个维度相同,某行或某列相同,则会触发广播机制。

广播性质
广播是numpy对不同形状的数组进行数值计算的方式。

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b=np.array([[4,5,6]])                       #广播行
print(a+b)
print()
a = np.array([[1],[2],[3]])
b=np.array([[1,2,3], [4,5,6],[7,8,9]])        #广播列
print(a+b)

在这里插入图片描述

常用操作函数

copyto()

用法:

numpy.copyto(dst,src,)

作用:

复制数组B的值到数组A,从src源数组复制到dst目标数组

参数:

dst目标数组,复制的值给谁的那个数组
src源数组,被复制的数组

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b=np.array([[4,5,6],[7,8,9],[10,11,12]])
np.copyto(b,a)
print(b)

在这里插入图片描述

ndim()

用法:

numpy.dim(a)

作用:

数组a的维度

参数:

a输入的数组

返回值:

返回数组a的维度

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6]])
b=np.zeros([20,50,30,1])
print(np.ndim(a))
print(np.ndim(b))

在这里插入图片描述

size()

用法:

numpy.size(a,axis)

作用:

计算数组中的元素值个数,如果有给定axis则返回沿axis轴上的元素值个数

参数:

a
axis

返回值:

返回元素值个数

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6]])
b=np.zeros([20,50])
print(np.size(a,axis=1))
print(np.size(b,axis=0))

在这里插入图片描述





以何种读取方式读取数组

reshape()

用法:

numpy.reshape(a,shape,order)

作用:

不改变数组内数据的情况下改变数组形状

参数:

a输入的要改变的数组
shape新输出的数组形状
order按照何种索引顺序读取数组值 默认C

返回值:

返回改变后的形状的数组

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6]])
np.reshape(a, 6)
print(np.reshape(a, [3,2]))
print()
print(np.reshape(a, [6,1]))
print()
print(np.reshape(a, 6))

在这里插入图片描述

order参数
order参数为C时,意味着按照类似c语言的数组索引顺序进行输出。
order参数为F时,意味着按照类似Fortran语言的数组索引顺序进行输出。

如果有一个二维数组,
order=C,会从[1,1],[1,2],[1,3]…[2,1][2,2]…从第一行开始列出第一行的每一列。
order=C,会从[1,1],[2,1],[3,1]…[1,2][2,2]…从第列行开始列出第一列的每一行。

import numpy as np
a = np.array([[1,2,3], [4,5,6]])
np.reshape(a, 6)
print(np.reshape(a, 6, order='F'))
print(np.reshape(a, 6, order='C'))

在这里插入图片描述

ravel()

用法:

numpy.ravel(a,order)

作用:

将多维数组变成一个连续的扁平数组

参数:

a 输入的多维数组
order以何种方式索引读取值进行扁平化 默认为C语言风格以行为主

返回值:

返回一个连续扁平的数组

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b=np.zeros([20,50])
print(np.ravel(a,order='C'))
print(np.ravel(a,order='F'))
print(np.ravel(b))

在这里插入图片描述

T(转置)

用法:

ndarray.T

作用:

矩阵转置

示例:

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b=np.array([[1,2,3],[4,5,6]])
print(a)
print()
print(a.T)
print()
print(b)
print()
print(b.T)

在这里插入图片描述

split()

用法:

numpy.split()

作用:

将一个数组分割成多个数组

参数:

ary 要切割的数组
indices_or_sections 切割的子数组的数目或者是切割的边界
axis按哪个轴切割

返回值:

切割后的子数组

示例:

import numpy as np
a = np.array([2,1,3,4,5,9,8,7,6])
print(np.split(a,3))           #切割成三部分
print(np.split(a,[3,6]))       #切割成三部分,切割点在数组内3和6的位置

b=np.array([[2,1,8,9],[5,7,3,4],[5,10,3,8],[3,9,2,77]])
print(np.split(b,4))                  #按行切割成四部分
print(np.split(b,4,axis=1))           #按列切割成四部分

在这里插入图片描述

排序

sort()

用法:

numpy.sort(axis,kind,order)

作用:

排序数组并返回排序后的数组副本

参数:

axis
kind
order

返回值:

返回排序后的数组副本

示例:

import numpy as np
a = np.array([2,1,3,4,5,9,8,7,6])
b=np.array([[2,1,8,9],[5,7,3,4],[5,10,3,8],[3,9,2,77]])
x=np.sort(a)
print(x)
print("\n")

y=np.sort(b,axis=0)         #按行轴方向,列内排序从上到下依次变大
print(y)
print("\n")

z=np.sort(b,axis=1)         #按列轴方向,列内排序从左至右依次变大
print(z)

在这里插入图片描述

numpy.array.sort()

用法:

array.sort(axis,kind,order)

作用:

在原数组上排序

参数:

axis
kind
order

示例:

import numpy as np
a = np.array([2,1,3,4,5,9,8,7,6])
b=np.array([[2,1,8,9],[5,7,3,4],[5,10,3,8],[3,9,2,77]])
a.sort()
print(a)
print("\n")
b.sort(axis=0)         #按行轴方向,列内排序从上到下依次变大
print(b)
print("\n")
b.sort(axis=1)         #按列轴方向,列内排序从左至右依次变大
print(b)

在这里插入图片描述

总结

Numpy库本质就是为了高效对数组(矩阵)的操作实现矩阵操作。本篇Numpy1着重介绍Numpy的基础操作,后续Numpy2将着重介绍线Numpy性代数中的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆鸭(呀)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值