概述
Numpy 数组
Numpy数组是具有固定大小的类型化数组。
Numpy数组是同质的,只能存放同一种类型的对象。
数组由两部分组成:
- 存储在连续的内存块中的实际数据
- 描述实际数据的元数据
文章目录
- Numpy 数组
- 创建一维数组
- 创建多维数组
- 选择 Numpy 数组元素
- Numpy 的数值类型
- 数据类型对象
- 字符码
- dtype 属性
- 一维数组的切片与索引
- 处理数组形状
- 堆叠数组
- 拆分 Numpy 数组
- Numpy 数组的属性
- 数组的转换
- 创建数组的视图和拷贝
创建一维数组
Numpy:数组的好处是,知道数组元素的类型,能确定存储数组的大小。
Numpy 数组还能用向量化运算来处理整个数组。
In[2]: import numpy as np
In[3]: a = np.arange(5)
In[4]: a.dtype
Out[4]: dtype('int64')
In[5]: a
Out[5]: array([0, 1, 2, 3, 4])
In[6]: a.shape
Out[6]: (5,)
- dtype属性:存储元素的类型
- shape属性:是一个元组,存放的是数组在每个维度的长度
创建多维数组
b = np.array([np.arange(2),np.arange(2)])
b
Out[8]:
array([[0, 1],
[0, 1]])
b.shape
Out[9]: (2, 2)
- array()函数:创建数组,需要传递给一个数组类型对象
选择 Numpy 数组元素
通过a[m,n]的形式访问,m和n是数组元素的下标
b[0,1]
Out[10]: 1
b[0,0]
Out[11]: 0
Numpy 的数值类型
类型 | 说明 |
---|---|
bool | 布尔类型,占用1bit |
inti | 长度取决于平台的整数(通常为int32和int64) |
int8 | 字节类型 |
int16 | 整型 |
int32 | 整型 |
int64 | 整型(-263~263-1) |
uint8 | 无符号整型 |
uint32 | 无符号整型 |
uint64 | 无符号整型(0~2^64-1) |
float16 | 半精度浮点型 |
float32 | 单精度浮点型 |
flaot64 | 双精度浮点型 |
complex64 | 复数类型,两个32位浮点数表示 |
complex128 | 复数类型,两个64位浮点数表示 |
np.float64(42)
Out[12]: 42.0
数据类型都有相应的转换函数
np.arange(7, dtype=np.uint16)
Out[13]: array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
创建指定数据类型
- 不能把复数类型转换成整数
- 不能把复数类型转换成浮点数
- 允许把浮点数转换成复数
数据类型对象
数据类型对象是 numpy.dtype 类的实例,数组也是有数据类型。
a.dtype.itemsize
Out[14]: 8
- itemsize属性:查看字节的具体数目
字符码
为了与前身 Numeric 向后兼容
类型 | 字符码 |
---|---|
整型 | i |
无符号整型 | u |
单精度浮点型 | f |
双精度浮点型 | d |
布尔型 | b |
复数型 | D |
字符型 | S |
np.arange(7, dtype='f')
Out[16]: array([0., 1., 2., 3., 4., 5., 6.], dtype=float32)
dtype 属性
t = np.dtype('f')
t.char
Out[19]: 'f'
t.type
Out[20]: numpy.float32
类型属性相当于数组元素对象的类型,dtype
的属性str
中保存的是一个表示数据类型的字符串。
一维数组的切片与索引
一维数组的切片操作与
Python
列表的切片一样。
a = np.arange(9, dtype='i')
a[3:7]
Out[24]: array([3, 4, 5, 6], dtype=int32)
a[::-1]
Out[25]: array([8, 7, 6, 5, 4, 3, 2, 1, 0], dtype=int32)
处理数组形状
拆解
b = np.arange(24).reshape(2,3,4)
b
Out[27]:
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]]])
b.ravel()
Out[28]:
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])
- ravel()函数:将多维数组变成一维数组
拉直
b.flatten()
Out[29]:
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])
- flatten()函数:功能与
ravel()
相同,返回的是真实的数组,而ravel()
函数返回的只是数组的视图。
指定数组形状
b.shape = (4,6)
b
Out[32]:
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]])
- shape属性:除了
reshape()
函数外,可以直接用元组来定义数组的形状。
转置
b.transpose()
Out[33]:
array([[ 0, 6, 12, 18],
[ 1, 7, 13, 19],
[ 2, 8, 14, 20],
[ 3, 9, 15, 21],
[ 4, 10, 16, 22],
[ 5, 11, 17, 23]])
- transpose()函数:将行变为列,列变为行。
调整大小
b.resize((2,12))
b
Out[35]:
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]])
- resize()函数:作用和
reshape()
类似,但是它会改变所作用的数组,reshape()
返回一个视图。
堆叠数组
数组既可以横向叠放还可以竖向叠放
a = np.arange(9).reshape(3,3)
b = 2 * a
水平叠放
a.shape
Out[45]: (3, 3)
b.shape
Out[46]: (3, 3)
np.hstack((a,b))
Out[47]:
array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
- np.hstack()函数:水平叠加数组
垂直叠加
np.vstack((a,b))
Out[48]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
- np.vstack()函数:垂直叠加函数
concatenate()函数
np.concatenate((a,b), axis=1) # 水平叠加
np.concatenate((a,b), axis=0) # 垂直叠加
深度叠加
np.dstack((a,b))
Out[51]:
array([[[ 0, 0],
[ 1, 2],
[ 2, 4]],
[[ 3, 6],
[ 4, 8],
[ 5, 10]],
[[ 6, 12],
[ 7, 14],
[ 8, 16]]])
- np.dstack()函数:深度叠加,沿着第三个坐标轴(纵向)的方法来叠加数组
列式堆叠
one = np.arange(2)
two = one * 2
np.column_stack((one, two))
Out[54]:
array([[0, 0],
[1, 2]])
- np.column_stack()函数:以列的方式对一维数组进行堆叠,当该方法堆叠二维数组时,过程类似于
hstack()
函数。
行式堆叠
np.row_stack((one,two))
Out[55]:
array([[0, 1],
[0, 2]])
- np.row_stack()函数:以行的当时对一维数组进行堆叠,当该方法堆叠二维数组时,过程类似于
vstack()
函数。
拆分 Numpy 数组
可以纵向、横向和深度方法来拆分数组,相关函数
hsplit()
、vsplit()
、dsplit()
和split()
函数。
横向拆分
Out[58]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
np.hsplit(a,3)
Out[59]:
[array([[0],
[3],
[6]]), array([[1],
[4],
[7]]), array([[2],
[5],
[8]])]
纵向拆分
np.vsplit(a,3)
Out[60]: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
np.splidt()函数
- np.split(a, 3, axis=1)和横向拆分
np.hsplit()
相同 - np.split(a, 3, axis=0)和纵向拆分
np.vsplit()
相同
深度拆分
dsplit():会沿着深度方向分解数组。
Numpy 数组的属性
属性 | 描述 |
---|---|
a.shape | 数组每个维度的长度 |
a.dtype | 数组存放的类型 |
a.size | 保存元素的数量 |
a.ndim | 维度的数量 |
a.itemsize | 各个元素所占用的字节数 |
a.nbytes | 存储整个数组占用的字节数量 |
a.T | 矩阵的转置,和a.transpose()作用相同 |
a.flat | 返回数组的所有元素,返回迭代器类型 |
数组的转换
转换成列表
a
Out[61]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
a.tolist()
Out[62]: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
创建数组的视图和拷贝
a.copy() # 创建一个副本
a.view() # 创建一个视图
最后
以上就是迷路耳机为你收集整理的Numpy 数组Numpy 数组的全部内容,希望文章能够帮你解决Numpy 数组Numpy 数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复