Numpy
6 Numpy
6.1 Numpy介绍与安装
Numpy是什么?
Numpy(Numerical Python)是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能,将Numpy的数组对象作为数据交换的通用语。
Numpy特点
- 提供高效多维数组
- 提供了基于数组的便捷算术操作以及广播机制
- 对数据进行快速的矩阵计算
- 对硬盘中数组数据进行读写操作
Numpy安装
直接在dos命令行中pip install numpy 即可。
6.2 Numpy基本操作
创建N-维数组对象
生成数组最简单的方式就是使用array函数。array函数接收任意的序列型对象,生成一个新的包含传递数据的Numpy数组。
import numpy as np
li = [1,2,3,4]
arr = np.array(li)
arr
------------------------------------
array([1, 2, 3, 4])
- numpy.arange([start,] stop[, step,])
import numpy as np
arr = np.arange(1,5)
#另一种方法也可以写成如下,结果一样
#arr = np.array(range(1,5))
arr
---------------
array([1, 2, 3, 4])
注意
- ndarray数组是一个通用的多维同类数据容器,意味着数组里面每一个元素均为相同类型。
6.3 Numpy基本操作数组的数据类型
Numpy数据类型
类型 |
类型代码 |
描述 |
int8,uint8 |
i1,u1 |
有符号和无符号的8数位整数 |
int16,uint16 |
i2,u2 |
有符号和无符号的16数位整数 |
int32,uint32 |
i4,u4 |
有符号和无符号的32数位整数 |
int64,uint64 |
i8,u8 |
有符号和无符号的64数位整数 |
float16 |
f2 |
半精度浮点数 |
float64 |
f8 |
标准双精度浮点数 |
bool |
? |
布尔值,存储True或False |
string_ |
S |
ASCII字符串类型,eg:‘S10’ |
unicode_ |
U |
Unicode类型,eg:‘U10’ |
查看数组数据类型
import numpy as np
arr = np.arange(1,5)
arr.dtype
-------------------------
dtype('int32')
注意
指定数组的数据类型
- numpy.array(object,dtype=None)
import numpy as np
arr = np.array([1,2,3],dtype='U')
#arr
#arr的输出结果 array(['1', '2', '3'], dtype='<U1')
arr.dtype
------------------------
dtype('<U1')
- arr.astype(dtype) # 修改数组数据类型
import numpy as np
arr = np.array([1,2,3])
arr = arr.astype(np.float32)
arr.dtype
-------------------------------
dtype('float32')
6.4 数组形状
arr.ndim
查看数组的维度,返回值为整数
arr.shape
查看数组的,返回值为元组
import numpy as np
arr = np.array([1,2,3,4])
arr.ndim
----------------
1
arr.shape
-----------------
(4,)
N-维数组对象
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
arr
“”“
三维
0轴:块
1轴:行
2轴:高
shape(0,1,2)
”“”
import numpy as np
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
arr.shape
------------------------
(2, 2, 3)
重塑数组
一维转多维
- arr.reshape(shape,order=“C”)
import numpy as np
arr = np.arange(6)
arr1 = arr.reshape(2,3) #reshape 不改变原有对象,需重赋予一个变量
print(arr)
print(arr1)
-----------------------
[0 1 2 3 4 5]
[[0 1 2]
[3 4 5]]
arr1.reshape(3,-1) #形状维度可以为-1,表示维度通过数据进行判断
-------------------------
array([[0, 1],
[2, 3],
[4, 5]])
#重塑三维
np.arange(24).reshape(2,3,4)
-----------------------------------------------
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]]])
多维转一维
- arr.flatten()
- arr.ravel()
array3 = array.ravel()
array3
------------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
array2 = array.flatten()
---------------------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#将二维转为一维 不推荐 举个例子
array=np.arange(12).reshape(3,4)
array1 = array.reshape(array.shape[0]*array.shape[1])
array1
--------------------------------
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
数组转置与换轴
- arr.transpose() # 转置
- arr.T # 转置
- arr.swapaxes() # 换轴 (需要传参,如二维:1,0)
创建数组其他函数
函数名 |
描述 |
array |
将输入数据转换为ndarray数组,自动推断数据类型,默认复制所有输入数据 |
asarray |
将输入数据转换为ndarray数组,但输入数据已经是ndarray则不再复制 |
arange |
python内建函数range的数组版,返回一个数组 |
zeros |
根据给定形状和数据类型生成全0数组 |
ones |
根据给定形状和数据类型生成全1数组 |
empty |
根据给定形状和数据类型生成一个没有初始化数值的空数组 |
full |
根据给定形状和数据类型生成指定数值的数组 |
import numpy as np
np.zeros(3) #创建一维的全为0的数组
---------------------------------------------
array([0., 0., 0.])
np.zeros((2,3)) #创建二维的 全为0的数组
----------------------------------
array([[0., 0., 0.],
[0., 0., 0.]])
数组的拷贝