深度学习——第3章 Python程序设计语言(3.6 numpy库)

3.6 numpy库

目录

1. 数据的维度

2. numpy基础知识

3. ndarray数组的创建

4. ndarray数组的操作

5. numpy广播机制

6. numpy的运算及函数库

7.numpy文件存取

1. 数据的维度

一个数据表达一个含义,而一组数据表达一个或多个含义。

维度:是一组数据的组织形式

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组和集合等概念。

列表:数据类型可以不同
数组:数据类型相同

二维数据:由多个一维数据构成,是一维数据的组合形式。

表格是典型的二维数据,其中,表头是二维数据的一部分

多维数据:由一维或二维数据在新维度上扩展形成。

数据维度的Python表示:

  1. 一维数据:列表和集合类型
  2. 二维数据:列表类型
  3. 多维数据:列表类型
  4. 高维数据:字典类型或其它如JSON、XML和YAML格式

2. numpy基础知识

2.1 numpy概述

numpy是开源的Python科学计算基础库,包含:

  • 强大的N维数组对象ndarray(Array; Matrix)
  • 成熟的(广播)函数库
  • 整合了C/C++/Fortran代码的工具
  • 实用的线性代数、傅里叶变换和随机数生成函数
  • 与稀疏矩阵运算包scipy配合使用更加方便

在这里插入图片描述

numpy是SciPy、Pandas等数据处理或科学计算库的基础。它提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库,为进行严格的数字处理而产生。很多大型金融公司,以及核心的科学计算组织如:Lawrence Livermore,NASA都在用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

2.2 numpy库的引用

Anaconda里面已经安装过numpy。

原生Python安装

在控制台中输入:
pip install numpy

安装之后可以导入

import numpy as np
#尽管别名可以省略或更改,但建议使用以上约定俗成的别名“np“

3. ndarray数组的创建

3.1 N维数组对象ndarray

Python已有列表类型,为什么需要一个数组对象(类型)?

标准Python中用list(列表)保存值,可以当做数组使用,但因为列表中的元素可以是任何对象,所以浪费了CPU运算时间和内存。

numpy诞生为了弥补这些缺陷。它提供了两种基本的对象:

  • ndarray:全称(n-dimensional array object)是储存单一数据类型的多维数组。
  • ufunc:全称(universal function object)它是一种能够对数组进行处理的函数。

numpy中文官网

A和B是一维数组,计算A2+B3,示例如下:

# python基础语法方式
def pySum():a=[0,1,2,3,4]b=[5,6,7,8,9]c=[]for i in range(len(a)):c.append(a[i]+b[i])return c
print(pySum())

输出结果:

[5, 7, 9, 11, 13]
# numpy库方式
def npSum():a=np.array([0,1,2,3,4])b=np.array([5,6,7,8,9])return a+b
print(npSum())

输出结果:

[ 5  7  9 11 13]

N维数组对象:ndarray

ndarray是一个多维数组对象,由两部分构成:

  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)

numpy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型(同质)元素的多维数组。

在这里插入图片描述

ndarray对维数没有限制。
小括号从左到右分别为第0轴,第1轴,第2轴,第3轴。

3.2 创建ndarray数组

ndarray数组的创建方法:

  • 使用Python列表、元组创建ndarray数组
  • 使用numpy函数创建ndarray数组
3.2.1 使用Python列表、元组创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)

当np.array()不指定dtype时,numpy将根据数据情况关联一个dtype类型

一维ndarray

import numpy as np
# 一维array
a = np.array([2,23,4], dtype=np.int32) # np.int默认为int32
print(a)
print(a.dtype)

输出结果:

[ 2 23  4]
int32

多维ndarray

# 多维array
a = np.array([[2,3,4],[3,4,5]])
print(a) # 生成2行3列的矩阵

输出结果:

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

输出结果:

(array([[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]], dtype=float32),dtype('float32'))
3.2.2 使用numpy函数创建ndarray数组
函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.linspace()根据起止数据等间距地填充数据,形成数组
np.empty(shape))创建全空数组每个值都是接近于零的数
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1数组
np.zeros_like(a)根据数组a的形状生成一个全0数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
np.concatenate()将两个或多个数组合并成一个新的数组

创建连续数组

# 创建连续数组
a = np.arange(10,41,2) # 10-20的数据,步长为2
print(a)
#输出结果:[10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40]

创建全1数据

# 创建全一数据,同时指定数据类型
a = np.ones((3,4),dtype=np.int32)
print(a)
# 创建全一数据,同时指定数据类型
a = np.ones((3,4),dtype=np.int32)
print(a)#输出结果:
[[1 1 1 1][1 1 1 1][1 1 1 1]]

创建全零数组

a = np.zeros((3,4))
print(a) # 生成3行4列的全零矩阵#输出结果:
[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]

创建全特定数值ndarray数组

a=np.full((3,4,5),10)
a.shape,a

输出结果:

((3, 4, 5),array([[[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10]],[[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10]],[[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10],[10, 10, 10, 10, 10]]]))

根据起止数据创建等间距序列数据

# 创建线段型数据
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段
print(a)

输出结果:

[ 1.          1.47368421  1.94736842  2.42105263  2.89473684  3.368421053.84210526  4.31578947  4.78947368  5.26315789  5.73684211  6.210526326.68421053  7.15789474  7.63157895  8.10526316  8.57894737  9.052631589.52631579 10.        ]

创建全空数组
在这里插入图片描述

3.3 ndarray数组的属性

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray数组的尺度,对于矩阵,n行m列
.sizendarray数组元素的个数,相当于.shape中n*m的值
.dtypendarray数组的元素类型
.itemsizendarray数组中每个元素的大小,以字节为单位

秩、维度、轴的数量

a=np.full((3,4,5),1.,dtype=np.float32)
print(a)
print('number of dim:', a.ndim)

输出结果:

[[[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]][[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]][[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]]]
number of dim: 3

数组的尺度、行数、列数...

3.4 ndarray数组的元素类型

数据类型说明
bool布尔类型,True或False
intc与C语言中的int类型一致,一般是int32或int64
intp用于索引的整数,与C语言中size_t一致,int32或int64
int8字节长度的整数,取值:[‐128,127]
int1616位长度的整数,取值:[‐32768,32767]
int3232位长度的整数,取值:[‐231,231‐1]
int6464位长度的整数,取值:[‐263,263‐1]
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,232‐1]
uint6432位无符号整数,取值:[0,264‐1]
float1616位半精度浮点数:1位符号位,5位指数,10位尾数
float3232位半精度浮点数:1位符号位,8位指数,23位尾数
float6464位半精度浮点数:1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数
complex128复数类型,实部和虚部都是64位浮点数

Python语法仅支持整数、浮点数和复数3种类型,而ndarray为什么要支持这么多种元素类型?

  • 科学计算涉及数据较多,对存储和性能都有较高要求
  • 对元素类型精细定义,有助于numpy合理使用存储空间并优化性能
  • 对元素类型精细定义,有助于程序员对程序规模有合理评估

ndarray数组可以由非同质对象构成,非同质ndarray元素为对象类型,非同质ndarray数组无法有效发挥numpy优势,尽量避免使用。
在这里插入图片描述

3.5 ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。

方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
.astype()对数组进行类型变换
.tolist()将数据类型转换为列表

reshape操作

a = [ i for i in range(24)]
a=np.array(a)
print(a)
# 使用reshape改变上述数据的形状
b = a.reshape((4,6))
print(b)

输出结果:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[[ 0  1  2  3  4  5][ 6  7  8  9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]

在这里插入图片描述

ndarray数组的类型变换
new_a = a.astype(new_type)
在这里插入图片描述

4.ndarray数组的操作

4.1 数组的索引和切片

索引:获取数组中特定位置元素的过程

切片:获取数组元素子集的过程

一维数组的索引和切片:与Python的列表类似,正序、反序、冒号运算符搭配使用。
在这里插入图片描述
多维数组的索引:类似列表索引,在方括号中每个维度一个索引值,逗号分割,正序、反序、冒号运算符搭配使用。

在这里插入图片描述
在这里插入图片描述
numpy的多维数组和一维数组类似。多维数组有多个轴。从内到外分别是第0轴,第1轴…

多维数组的切片:类似列表切片,在方括号中每个维度一个索引值,逗号分割,正序、反序、冒号运算符搭配使用。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 ndarray数组的运算

4.2.1 数组与标量的计算

数组与标量之间的运算作用于数组的每一个元素
在这里插入图片描述

4.2.2 numpy一元函数

对ndarray中的数据执行元素级运算的函数

函数说明
np.abs(x)np.fabs(x)计算数组各元素的绝对值
np.sqrt(x)计算数组各元素的平方根
np.square(x)计算数组各元素的平方
np.log(x)计算数组各元素的自然对数e为底的对数
np.log2(x)计算数组各元素的2为底对数
np.log10(x)计算数组各元素的10为底对数
np.ceil(x)np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x)计算数组各元素的普通型和双曲型三角函数
np.sin(x)计算数组各元素的普通型和双曲型三角函数
np.tan(x)计算数组各元素的普通型和双曲型三角函数
np.cosh(x)计算数组各元素的普通型和双曲型三角函数
np.sinh(x)计算数组各元素的普通型和双曲型三角函数
np.tanh(x)计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数值
np.sign(x)计算数组各元素的符号值,1(+),0,‐1(‐)

在这里插入图片描述
在这里插入图片描述

4.2.3 numpy二元函数
函数说明
+ - * / **两个数组各元素进行对应运算
np.maximum(x,y)元素级的最大值/最小值计算
np.minimum(x,y)元素级的最大值/最小值计算
np.fmax()元素级的最大值/最小值计算
np.fmin()元素级的最大值/最小值计算
np.mod(x,y)元素级的模运算
np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == !=算术比较,产生布尔型数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. numpy广播机制(Broadcasting)

numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下。如果让一个数组加1的话,结果时整个数组的结果都会加1,这是什么情况?
在这里插入图片描述
这就是广播机制:numpy 可以转换这些形状不同的数组,使它们都具有相同的大小,然后再对它们进行运算。
在numpy中进行数组运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这里要求维数相同,并且各维度的长度相同,但是当运算中两个数组的形状不同使时,numpy将会自动触发广播机制。

要了解numpy的广播机制,才能更好的进行数组的运算。

numpy数组间的基础运算是一对一,也就是a.shape==b.shape,但是当两者不一样的时候,就会自动触发广播机制。
在这里插入图片描述
在这里插入图片描述
广播是numpy在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在相应的元素上进行。如果两个数组具有完全相同的形状,则这些操作被无缝执行。

如果两个数组的维数不相同,则元素到元素的操作是不可能的。在 numpy 中仍然可以对形状不相似的数组进行操作,较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

6. numpy的运算及函数库

6.1 ufunc函数

ufunc是universal function的简称,它是一种能对数组每个元素进行运算的函数。numpy的许多ufunc函数都是用C语言实现的,因此它们的运算速度非常快。
在这里插入图片描述
值得注意的是,对于同等长度的ndarray,np.sin()比math.sin()快,但是对于单个数值,math.sin()的速度则更快。
在这里插入图片描述
在这里插入图片描述

6.1.1 四则运算

numpy提供了许多ufunc函数,它们和相应的运算符运算结果相同。

算术运算符:+ - * / % **
在这里插入图片描述
在这里插入图片描述

6.1.2 关系运算和布尔运算

使用关系运算符“>、<、>=、<=、==、!=”对两个数组进行比较,会返回一个布尔数组,每一个元素都是对应元素的比较结果。

布尔运算在numpy中也有对应的ufunc函数。
在这里插入图片描述

表达式ufunc函数
x1==x2np.equal(x1,x2)
x1!=x2np.not_equal(x1,x2)
x1<x2np.less(x1,x2)
x1<=x2np.not_equak(x1,x2)
x1>x2np.greater(x1,x2)
x1>=x2np.gerater_equal(x1,x2)

在这里插入图片描述

6.2 numpy的随机数函数

numpy产生随机数的模块在random里面,其中有大量的分布。

numpy的random子库

np.random.*

np.random.rand();np.random.randn();np.random.randint()

函数说明
seed(s)随机数种子,s是给定的种子值
rand(d0,d1,…,dn)根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,…,dn)根据d0‐dn创建随机数数组,标准正态分布
randint(low[,high,shape])根据shape创建随机整数或整数数组,范围是[low,high)
choice(a[,size,replace,p])从一维数组a中以概率p抽取元素,形成size形状新数组
normal(loc,scale,size)产生具有正态分布的数组,loc均值,scale标准差,size形状
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状,replace表示是否可以重用元素,默认为False
poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率,size形状
shuffle(a)根据数组a的第0轴进行随排列,改变数组x
permutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变数组x

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 numpy的统计函数

numpy直接提供的统计类函数(np.*):

np.std()
np.var()
np.average()
函数说明
sum(a,axis=None)根据给定轴axis计算数组a相关元素之和,axis整数或元组
mean(a,axis=None)根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None)根据给定轴axis计算数组a相关元素的加权平均值
std(a,axis=None)根据给定轴axis计算数组a相关元素的标准差
var(a,axis=None)根据给定轴axis计算数组a相关元素的方差
min(a)max(a)计算数组a中元素的最小值、最大值
argmin(a)argmax(a)计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index,shape)根据shape将一维下标index转换成多维下标
ptp(a)计算数组a中元素最大值与最小值的差
median(a)计算数组a中元素的中位数(中值)
product连乘积
maxinum二元最大值
mininum二元最小值
sort数组排序
percentile分位数
argsort数组排序下标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
clip(Array,Array_min,Array_max)

将Array_min<X<Array_max X表示矩阵A中的数,如果满足上述关系,则原数不变。

否则,如果X<Array_min,则将矩阵中X变为Array_min;

如果X>Array_max,则将矩阵中X变为Array_max.

在这里插入图片描述
在这里插入图片描述

6.4 多维矩阵运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.5 numpy array合并

在这里插入图片描述
在这里插入图片描述
多个矩阵合并:
在这里插入图片描述

在这里插入图片描述
合并示例:
在这里插入图片描述

6.6 numpy array分割

构造3行4列矩阵

import numpy as np
A = np.arange(12).reshape((3,4))
print(A)

输出结果:

[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]

等量分割:
在这里插入图片描述
不等量分割
在这里插入图片描述
其他分割方式
在这里插入图片描述

6.7 numpy copy与 =

赋值方式会带有关联性
在这里插入图片描述
copy()赋值方式没有关联性
在这里插入图片描述

6.8 其它常用函数

np.bincount()
x = np.array([1, 2, 3, 3, 0, 1, 4])
np.bincount(x)

输出结果:

array([1, 2, 1, 2, 1], dtype=int64)

统计索引出现次数:索引0出现1次,1出现2次,2出现1次,3出现2次,4出现1次

因此通过bincount计算出索引出现次数如下:

上面怎么得到的?

对于bincount计算吗,bin的数量比x中最大数多1,例如x最大为4,那么bin数量为5(index从0到4),也就会bincount输出的一维数组为5个数,bincount中的数又代表什么?代表的是它的索引值在x中出现的次数!

还是以上述x为例子,当我们设置weights参数时候,结果又是什么?

这里假定:

w = np.array([0.3,0.5,0.7,0.6,0.1,-0.9,1])

那么设置这个w权重后,结果为多少?

np.bincount(x,weights=w)

输出结果:

array([ 0.1, -0.6,  0.5,  1.3,  1. ])

怎么计算的?

先对x与w抽取出来:

x ---> [1, 2, 3, 3, 0, 1, 4]

w ---> [0.3,0.5,0.7,0.6,0.1,-0.9,1]
索引 0 出现在x中index=4位置,那么在w中访问index=4的位置即可,w[4]=0.1

索引 1 出现在x中index=0与index=5位置,那么在w中访问index=0index=5的位置即可,然后将两这个加和,计算得:w[0]+w[5]=-0.6
其余的按照上面的方法即可!

bincount的另外一个参数为minlength,这个参数简单,可以这么理解,当所给的bin数量多于实际从x中得到的bin数量后,后面没有访问到的设置为0即可。

还是上述x为例:

这里我们直接设置minlength=7参数,并输出!

np.bincount(x,weights=w,minlength=7)

输出结果:

array([ 0.1, -0.6,  0.5,  1.3,  1. ,  0. ,  0. ])

与上面相比多了两个0,这两个怎么会多?

上面知道,这个bin数量为5,index从0到4,那么当minlength为7的时候,也就是总长为7,index从0到6,多了后面两位,直接补位为0即可!

np.argmax()
函数原型为:numpy.argmax(a, axis=None, out=None).

函数表示返回沿轴axis最大值的索引。

x = [[1,3,3],[7,5,2]]
print(np.argmax(x))
#输出结果:3

对于这个例子我们知道,7最大,索引位置为3(这个索引按照递增顺序)!

axis属性

axis=0表示按列操作,也就是对比当前列,找出最大值的索引!

x = [[1,3,3],[7,5,2]]
print(np.argmax(x,axis=0))
#输出结果:[1 1 0]

axis=1表示按行操作,也就是对比当前行,找出最大值的索引!

x = [[1,3,3],[7,5,2]]
print(np.argmax(x,axis=0))
#输出结果:[1 1 0]

那如果碰到重复最大元素?

返回第一个最大值索引即可!

例如:

x = np.array([1, 3, 2, 3, 0, 1, 0])
print(x.argmax())
#输出:1

上述合并实例
这里来融合上述两个函数,举个例子:

x = np.array([1, 2, 3, 3, 0, 1, 4])
print(np.argmax(np.bincount(x)))
#输出:1

最终结果为1,为什么?

首先通过np.bincount(x)得到的结果是:[1 2 1 2 1],再根据最后的遇到重复最大值项,则返回第一个最大值的index即可!2的index为1,所以返回1。
求取精度

np.around([-0.6,1.2798,2.357,9.67,13], decimals=0)#取指定位置的精度
#输出结果:array([-1.,  1.,  2., 10., 13.])

看到没,负数进位取绝对值大的!
在这里插入图片描述
从上面可以看出,decimals表示指定保留有效数的位数,当超过5就会进位(此时包含5)!

但是,如果这个参数设置为负数,又表示什么?

np.around([1,2,5,6,56], decimals=-1)
#输出结果:array([ 0,  0,  0, 10, 60])

发现没,当超过5时候(不包含5),才会进位!-1表示看一位数进位即可,那么如果改为-2呢,那就得看两位!

np.around([1,2,5,50,56,190], decimals=-2)
#输出结果:array([  0,   0,   0,   0, 100, 200])

看到没,必须看两位,超过50才会进位,190的话,就看后面两位,后两位90超过50,进位,那么为200!
计算沿指定轴第N维的离散差值
在这里插入图片描述
取整
在这里插入图片描述
看到没,负数取整,跟上述的around一样,是向左!

取上限
在这里插入图片描述
取上限!找这个小数的最大整数即可!
查找
利用np.where实现小于0的值用0填充吗,大于0的数不变!
在这里插入图片描述
numpy的梯度函数

函数说明
np.gradient(f)计算数组f中元素的梯度,当f为多维时,返回每个维度梯度

梯度:连续值之间的变化率,即斜率

XY坐标轴连续三个X坐标对应的Y轴值:a, b, c,其中,b的梯度是: (c‐a)/2

在这里插入图片描述

7. numpy文件存取

7.1 CSV文件的存取

CSV (Comma‐Separated Value, 逗号分隔值),它是一种常见的文件格式,用来存储批量数据。

CSV文件的保存:

np.savetxt(frame, array, fmt=‘%.18e’, delimiter=None)

  • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
  • array : 存入文件的数组
  • fmt : 写入文件的格式,例如:%d %.2f %.18e
  • delimiter : 分割字符串,默认是任何空格
    在这里插入图片描述
    CSV文件的读取:

np.loadtxt(frame, dtype=np.float32, delimiter=None, unpack=False)

  • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件

  • dtype : 数据类型,可选

  • delimiter : 分割字符串,默认是任何空格

  • unpack : 如果True,读入属性将分别写入不同变量
    在这里插入图片描述
    CSV文件的局限性:

  • CSV只能有效存储一维和二维数组;

  • np.savetxt()和np.loadtxt()只能有效存取一维和二维数组

7.2 多维数据的存取

文件的保存:

a.tofile(frame, sep=‘’, format=‘%s’)

  • frame : 文件、字符串
  • sep : 数据分割字符串,如果是空串,写入文件为二进制
  • format : 写入数据的格式
a.tofile('1.txt',sep=',',format='%d')

文件的读取:

np.fromfile(frame, dtype=float, count=‐1, sep=‘’)

  • frame : 文件、字符串
  • dtype : 读取的数据类型
  • count : 读入元素个数,‐1表示读入整个文件
  • sep : 数据分割字符串,如果是空串,写入文件为二进制
d=np.fromfile('1.txt',dtype=np.float32,sep=',')
d

输出结果:

array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25.,26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36., 37., 38.,39., 40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50., 51.,52., 53., 54., 55., 56., 57., 58., 59., 60., 61., 62., 63., 64.,65., 66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76., 77.,78., 79., 80., 81., 82., 83., 84., 85., 86., 87., 88., 89., 90.,91., 92., 93., 94., 95., 96., 97., 98., 99.], dtype=float32)

该方法需要读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用。

7.3 numpy的便捷文件存取

保存

np.save(fname, array) 或np.savez(fname, array)

  • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
  • array : 数组变量

读取

np.load(fname)

  • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
np.save('a.npy',a)
b=np.load('a.npy')
b

输出结果:

array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-2算法基础-常用库函数

1.排序 sort(first,last,cmp) first指向要排序范围的第一个元素&#xff0c;从0起 last指向要排序范围的最后一个元素的下一个位置 cmp&#xff08;可选&#xff09;&#xff0c;自定义函数&#xff0c;默认从小到大 评测系统 #include <iostream> #include<algorith…

【无线网络技术】——无线广域网(学习笔记)

&#x1f4d6; 前言&#xff1a;无线广域网(WWAN)是指覆盖全国或全球范围内的无线网络&#xff0c;提供更大范围内的无线接入&#xff0c;与无线个域网、无线局域网和无线城域网相比&#xff0c;它更加强调的是快速移动性。典型的无线广域网&#xff1a;蜂窝移动通信系统和卫星…

vuepress-----13、分割config

13、分割config config.js const headConfig require(./config/headConfig); const pluginsConfig require(./config/pluginsConfig); const themeConfig require(./config/themeConfig)module.exports {title: "小邵子",description: 小邵子的个人笔记,head: he…

如何将idea中导入的文件夹中的项目识别为maven项目

问题描述 大家经常遇到导入某个文件夹的时候&#xff0c;需要将某个子文件夹识别为maven项目 解决方案

3-Mybatis

文章目录 Mybatis概述什么是Mybatis&#xff1f;Mybatis导入知识补充数据持久化持久层 第一个Mybatis程序&#xff1a;数据的增删改查查创建环境编写代码1、目录结构2、核心配置文件&#xff1a;resources/mybatis-config.xml3、mybatis工具类&#xff1a;Utils/MybatisUtils4、…

cv2.threshold 图像二值化

图像二值化 whatparameters示例 what cv2.threshold是OpenCV中用于进行图像二值化的函数。它的作用是将输入图像的像素值转换为两个可能的值之一&#xff0c;通常是0&#xff08;黑色&#xff09;或255&#xff08;白色&#xff09;&#xff0c;根据一个设定的阈值。图像二值化…

校园网无法登录IEEE

校园网无法登录IEEE 取消IPV6协议版本的对勾

(c语言进阶)联合

一.定义 联合体与结构体极其相似&#xff0c;只不过联合体的所有成员是共用同一块内存的。 二.联合体大小的计算 联合体共用内存的大小为联合体成员大小的最大值来定 #include<stdio.h> union Un {int a;char c; }; int main() {union Un u;printf("%zu",s…

TCP一对一聊天

客户端 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io…

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…

智能外呼核心功能是什么? 智能外呼有什么功能?

智能外呼是现今市场营销领域中的一种新型的技术手段。与传统的市场营销不同&#xff0c;智能外呼不仅仅是单纯的电话营销&#xff0c;其功能更加丰富多样&#xff0c;而且能够节省很多人力、财力资源。 智能外呼的核心功能是什么呢&#xff1f; 智能外呼的核心功能是AI智能外呼…

【力扣】206.反转链表

206.反转链表 这道题有两种解法&#xff0c;但不只有两种&#xff0c;嘿嘿。 法一&#xff1a;迭代法 就是按循序遍历将每一个指针的指向都给改了。比如说1——>2——>3改为null<——1<——2<——3这样。那这里以第二个结点为例&#xff0c;想一想。我想要指向…