python中的numpy基础知识

numpy的基础知识总结

numpy是一个数据包,里面包含了关于多维数组对象和用于处理数组的例程集合组成的库。博主本身也是学生,最近把numpy的基础知识整理好写成博客,对numpy在这一阶段的学习用博客进行收尾。

一.numpy中的数组的创建与某些基础操作

(1)通过列表,元组等集合体为中介创建np.array

x = np.array(((1,2,3),(1,2,3)))
y = np.array([[1,2,3],[1,2,3]])
print(x==y)

(2)通过numpy的函数创建数组

np.arange(int)函数,生成以某一个arange的整数数组

np.arange(10)

np.ones(shape)与np.zeros(shape)与np.full(shape,value)

np.ones([4,5])
np.zeros([3,2,4])
数组
np.full([2,4],4)

都可以用dtype控制创建的数组的值得类型

np.ones((2,4),dtype=np.int32)

并且说明一下:原先python的数的大小没有数据分类的概念,是有多大就能以int创建到多大的,而在numpy中为了更好的对大的数组进行数据位置存贮的分配,就把int32,与int64等多种数据类型在numpy中重新引入python

除上述以外还有np.zeros_like(shape)和np.ones(shape)和np.full_like(shape,value)可以创建数组,但使用方法与前面对应的函数极其类似,故不在赘述。

(3)其他
np.linespace(a,b,x,endpoint=bool)

a = np.linspace(1,11,4,endpoint=False)
print(a)

输出结果[1. 3.5 6. 8.5]
根据endpoint后面接的布尔值判断是否挖去后面一个点,对范围为a到b是否取b的x个数形成的等差数组

np.reshape()
reshape可以改变数组的形状,但前提是前后的数组的最底层元素总数不发生改变
a.flatten()
将数组a进行复制变成一维数组,但对原数组a不发生改变

a.astype(type)
astyle可以把数组的数据类型更换空间,对原元素不发生改变

a.tolist
可以把数组变成列表

a = np.arange(25)
a.reshape(3,8)

a.flatten()

a.astyle(float)

a.tolist()

数组的切片

数组的切片类似于c里面的数组的切片

a = np.arange(24)
a.reshape([2,3,4])

生成了以下的数组:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
如果要得到13,使用a[1,1]即可
print(a[0:23:1,0:23:1])即能生成同样的数组。
0:23是数组的范围,1是步长逗号是隔开一维和二维的范围与步长。

二.numpy的数据储存

(1)csv文件
保存csv文件np.savetxt(frame,array,fmt=’%.18e’.delimiter=None)

读取csv文件np.loadtxt(“a.csv”,dtype=np.float,delimiter=None,unpack=Flase)

a = np.arange()100.reshape([5,20])
np.savetxt("a.csv",a,fmt=".%.18e",delimiter=None)
np.loadtxt("a.csv",dtype=np.float,delimiter=None,unpack=False)

其中frame是文件,字符串或者是产生器,delimiter是分隔符,代表前一个元素的结束与下一个的开始,unpack是对于是否写入不同的变量的选择

(2)二进制bat
np.tofile(frame,sep=”,format=”%s”)
np.fromfile()frame,dtype=float,count=-1,sep=”)

a = np.arange(100).reshape([5,4,5])
a.tofile("b.bat",sep=',',format="%d")
b = np.fromfile("b.bat",dtype=np.float,sep=',').reshape(5,4,5)

其中sep为分隔的符号,dtype是由二进制转换而来的数据的种类
。二进制适用性较高,但要提前知道数据种类与结构

(3)numpy的便捷文件存储

存储np.save(fname,array),np.savez(fname,array),
读取np.load(fame)

a =np.arange(100).reshape(5,20)
np.save("a.npy",a)
b = np.load("a.npy")

总结:csv文件存储对于二维以及以下的数组而言十分方便,但维度是三维及以上存储就不应使用csv,用二进制的bat存贮数据虽然适用性很强,但需要在还原的时候知道数组原先的数据类型与形状,numpy自带的数据储存基本所有的数组都能进行存储,但在与其他程序进行对接的时候不是特别方便

三.numpy内的随机函数

np.random.rand(shape),此处的shape与之前不同,不能用列表或括号进行收纳。随机生成符合shape的[0,1)的小数数组

np.random.randn(shape),shape同上,是符合shape的(-1,1)的小数的符合正态分布的随机数组。

np.random.seed(a)对以下的随机变化设置种子,对于相同的种子 进行相同的次数的相同处理会出现相同的结果。

np.random.randint(a,b,shape),创建范围是a,b的shape的一个数组

np.random.rand(3,4,5)

np.random.randn(3,4,5)

np.random.seed(10)

np.random.randint(1,100,(3,4))

四.对已形成的数组的基本的操作

函数用法sum(a,axis=None)根据axis对数组a进行统计求和运算的函数mean(a,axis=None)根据axis定轴进行相关期望的计算std(a,axis=None)根据axis定轴计算标准差average(a,axis=None,weights=None)根据axis定轴与weights确定权重进行计算权重平均值var(a,axis=None)根据axis定轴进行方差计算

所有axis的参数进行运算,默认最外轴,但可以根据axis调整维度,对最基本的元素进行运算生成的结果基于原来设定的axis向下降一个axis

此外还有其他的统计函数min(a),max(a),argmin(a)
argmax(a)计算a中元素最小值与最大值降一维后的下标
unravel_index(index,shape)根据shape将一维下标index转换为多维下标

ptp(a)计算a中元素最大值与最小值的差
median(a)计算数组a中元素的中位数(中值)

b = arange(15,0,-1).reshape(3,5)
print(np.min(b),np.max(b))
print(np.argmin(b))
print(np.unravel_index(np.argmin(b),b.shape))
np.ptp(b)
np.median(b)

numpy中的随机函数中的梯度函数:gradient很重要
np.gradient(f)计算数组f中的元素的梯度,dangf为多维时返回每个函数梯度
梯度是连续值的变化率,又称斜率,在xoy坐标系中连续三个x坐标对应道德y值:a,b,c
其中b的梯度是(c-a)/2

a = np.random.randint(0,20,(5))
print(a)
print(np.gradient(a))
在进行数据处理的时候gradient很重要

Image库

numpy图像的数组表示
图像一般使用rgb色彩模式
R:red红色,G:green绿色,B:blue蓝色,其中取值范围都是0—255
python还有一个非常强大的处理图像的pil库:Python Image Library
用pillow第三方库名下载,但用PIL调用
RGB三个颜色通道的变化和叠加得到各种颜色
from PIL import Image
Image是PIL库代表一个图像的类
图像是一个由像素组成的二维矩阵,每个元素都是一个RGB值,每个一维元素
都是三个RGB值元素组成得三个字节的元素

对PIL的介绍本文就点到为止,不再介绍。

Original: https://blog.csdn.net/weixin_51224093/article/details/117221324
Author: 三瓣西瓜
Title: python中的numpy基础知识

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/763257/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球