numpy的使用(一)(reshape()有待研究)

numpy的使用numpy简介numpy是Python中用来处理大量的维度数组与矩阵运算的库,也针对数组运算提供了大量的数学函数库.numpy主要哦用于数组计算,包含:一个强大的N维数组对象ndarry广播功能函数整合C/C++/Fortran代码的工具线性代数、傅里叶变换、随机数生成等功能numpy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代MATLAB.是一个强大的科学计算环境,有助于我们通过Python学习数据
摘要由CSDN通过智能技术生成

numpy的使用

numpy简介

numpy是Python中用来处理大量的维度数组与矩阵运算的库,也针对数组运算提供了大量的数学函数库.
numpy主要哦用于数组计算,包含:

  • 一个强大的N维数组对象ndarry
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能
    numpy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代MATLAB.是一个强大的科学计算环境,有助于我们通过Python学习数据科学或者机器学习.
    SciPy是一个开源的Python算法库和数学工具包.
    SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算.
    Matplotlib是Python编程语言机器数值数学扩展包numpy的可视化操作界面.它为利用通用的图形用户界面工具包,如Tkinter,wxPython,Qt或者GTK+想应用程序嵌入式绘图提供了应用程序接口(API).

numpy的Ndarray对象

numpy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引.
ndarray对象是用于存放同类元素的多维数组.
ndarray中的每个元素在内存中都有相同存储大小的区域.
ndarray内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针;
  • 数据类型或dtype:描述在数组中的固定大小值的个子;
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组;
  • 一个跨度元祖(stride):其中的整数指的是为了前进道当前维度下一个元素需要"跨过"的字节数.
    注释:跨度可以是复数,这样会使数组在内存中后向移动,切片中obj[::-1]或者obj[:,::-1]就是如此
    注释:ndarray是一个对象,而array是一个方法.

ndarray的创建

创建一个ndarray对象只需要调用Array函数即可:
numpy.array(object, dtype=None,copy=True, order=None,subok=False, ndmin=0)
参数说明:

名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度

ndarray对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置.内存块以行顺序(C样式)或列顺序(FORTRAN或MATLAB风格,即前述的F样式)来保存元素.

numpy的数据类型

numpy支持的数据类型比Python内置的类型要多很多,基本上可以和C语言的数据类型对应上,其中部分类型对应为Python内置的类型.下表列举了常用的Numpy基本类型.

名称 描述
bool_ 布尔型数据类型(True或False)
int_ 默认的整数类型(类似于C语言中的long,int32或int64)
intc 与C的int雷影一样,一般是int32或int64
intp 用于索引的整数类型(类似于C的ssize_t,一般情况下仍然是int32或int64)
int8 字节(-128 to127)
int16 字节(-216 to 216-1)
int32 同理
int64 同理
uint8 无符号整数(0 to 28)
unit16(32,64) 同理
float_ float64类型的简写
float16 半精度浮点数,包括1个符号位,5个指数位,10个尾数位
float32 单精度浮点数,包括1个符号位,8个指数位,23个尾数位
float64 双精度浮点数,包括1个符号位,11个指数位,52个尾数位
complex_ complex128的简写,即128位复数
complex64 复数,表示双32位浮点数(实数部分和虚数部分)
complex128 复数,表示双64位浮点数(实数部分和虚数部分)

numpy的数值类型实际上是dtype对象的实例,并对应唯一的字符,包括np.boo;_,np.int32,np.float32,等等

数据类型对象(dtype)

数据类型对象是用来描述与数组对应的内存区域如何使用,这依赖如下几个方面:

  • 数据的类型(整数,浮点数或者Python对象)
  • 数据的大小(例如,整数使用多少个字节存储)
  • 数据的字节顺序(小端法或大端法)
  • 在结构化类型的情况下,字段你的名称,每个字段的数据类型和每个字段所取的内存块的部分
  • 如果数据类型是子数组,它的形状和数据类型
    字节顺序是通过对数据类型预先设定"<“或”>“来决定的.”<“以为这小端法(最小值存储在最小的地址,即低位组放在最前面).”>"意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面).
    dtype对象使用一下语法构造的:
    numpy.dtype(object, align, copy)
  • object:要转换为的数据类型对象
  • align:如果为true,填充字段时期类似C的结构体
  • copy:复制dtype对象,如果为false,则是对内置数据类型对象的引用
注释:numpy.dtype对象是用来规范numpy.array创建的数据的数据类型的,可以将多个字段的不同类型放在dtype类型中

numpy中每个内建类型都有一个唯一定义它的字符代码,如下:

字符 对应类型
b 布尔型
i (有符号)整型
u 无符号整型integer
f 浮点型
c 复数浮点型
m timedelta(时间间隔)
M datetime(日期时间)
O Python对象
S,a byte-字符串
U Unicode
V 原石数据(void)

numpy的数组属性

numpy数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为1,二维数组的秩为2,以此类推.
在numpy中,每一个线性的数组称为一个轴(axis),也就是维度(dimensions).比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组.所以一维数组就是numpy中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组,而轴的数量—秩就是数组的维数.
很多时候可以声明axis,axis=0,表示沿着第0轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作.
numpy的数组中比较重要的ndarray对象属性有:

属性 说明
ndarray.ndim 秩::即轴的数量或者维度的数量
ndarray.shape 数组的维度,对于矩阵,n行m列
ndarray.size 数组元素的总个数:相当于shape中的n*m的值
ndarray.dtype ndarray对象的元素类型
ndarray.itemsize ndarray对象中每个元素的大小,以字节为单位
ndarray.flags ndarray对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性.

ndarray.ndim

ndarray.ndim用于返回数组的维数,等于秩.

ndarray.shape()

ndarray.shape()表示数组的维度,返回一个元组,这个元组的航都就是维度的数目,即ndim属性(秩).比如,一个二维数组,其维度表示"行数"和"列数".
ndarray.shape也可以用来调整数组大小.
numpy也提供了reshape()函数来调整数组大小.
ndarray.reshape()方法

import numpy as np

a = np.arange(24)
print(a)
print(a.ndim)
b = a.reshape(2, 4, 3)
print(b)
print(b.ndim)

结果如下:

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

 [[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]
3

ndarray.itemsize

ndarray.itemsize以字节的形式返回数组中每一个元素的大小(占用内存的大小).
例如,一个元素类型为float64的数组itemsize属性值为8(8*8),又如,一个元素类型为complex32的数组item属性为4(8*4)
一个字节的长度为8,float64占用8个字节的长度,一个complex32占用4个字节的长度

ndarray.flags

属性 描述
C_CONTIFUOUS© 数据是在一个单一的C风格的连续段中
F_CONTIFUOUS(F) 数据是在一个单一的Fortran风格的连续段中
OWNDATA(O) 数组拥有它所使用的内存或从另一个对象中借用它
WRITEABLE(W) 数据区域可以被写入,将该值设置为False,则数据为只读
ALIGEND(A) 数据和所有元素都适当地对齐到硬件上
UPDATEIFCOPY(U) 这个数组是其他数组的一个副本,当这个数组被释放时,原数组的内容将被更新

numpy创建数组

ndarray数组除了可以使用底层的ndarray构造器来创建外,也可以通过以下几种方式来创建.

numpy.empty()

numpy.empty()方法用来创建一个指定形状(shape),数据类型(dtype)且未初始化的数组:
numpy.empty(shape, dtype=float, order='C')
参数说明"

参数 描述
shape 数组形状
dtype 数据类型,可选
order 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序.

使用numpy.empty()方法创建的数组元素为随机值,因为它们未初始化

numpy.zeros()

numpy.zeros()创建指定形状的数组,数组元素以0来填充
numpty.zeros(shape, dtype=float, order='C')
参数说明:
参数|描述
shape|数组形状
dtype|数据类型,可选
order|'C’用于C的航数组,或者’F’用于FORTRAN的列数组

numpy.ones()

numpy.ones()创建指定形状的数组,数组元素以1来填充:
numpy.ones(shape, dtype=None, order='C')
参数说明同numpy.zeros

numpy从已有的数组创建数组

numpy.asarray()

numpy.asarray()类似numpy.array(),但是numpy.asarray参数只有三个,比numpy.array少两个.
numpy.asarray(a, dtype=None, order=None)
参数说明:

参数 描述
a 任意形式的输入参数,可以是:列表,列表的元组,元组,元组的元组,元组的列表,多维数组
dtype 数据类型,可选
order 可选,有’C’和’F’两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序

numpy.frombuffer()

numpy.frombuffer()用于实现动态数组
numpy.frombuffer()接受buffer输入参数,以流的形式读入转化成ndarray对象
numpy.frombuffer(buffer,dtype=float, count=-1, offset=0)
注意:buffer是字符串的时候,Python3默认str是Unicode类型,所以要转成bytestring在原str前加上b
参数说明:

参数 描述
buffer 可以使任意对象,会以流的形式读入
dtype 返回数组的数据类型
count 读取的数据数量,默认为-1,读取所有数据
offset 读取的起始位置,默认为0

numpy.fromiter()

numpy.fromiter()方法从可迭代对象中建立ndarray对象,返回一维数组
`numpy.fromiter(iterable, dtype, count=-1)
参数说明:

参数 描述
iterable 可迭代对象
dtype 返回数组的数据类型
count 读取的数据数量,默认为-1,读取所有数据
li = range(5)
print(li
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值