文章目录
一:NumPy介绍
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。在数据分析和机器学习领域被广泛使用。他有以下几个特点:
- numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
- Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
- 有一个强大的N维数组对象Array(一种类似于列表的东西)。
- 实用的线性代数、傅里叶变换和随机数生成函数。
总而言之,他是一个非常高效的用于处理数值型运算的包。
二:Numpy入门
1. 基础知识
因为数组中只能存储同一种数据类型,因此可以通过dtype获取数组中的元素的数据类型。以下是ndarray.dtype的常用的数据类型:
数据类型 描述 唯一标识符
bool 用一个字节存储的布尔类型(True或False) 'b'
int8 一个字节大小,-128 至 127 'i1'
int16 整数,16 位整数(-32768 ~ 32767) 'i2'
int32 整数,32 位整数(-2147483648 ~ 2147483647) 'i4'
int64 整数,64 位整数(-9223372036854775808 ~ 9223372036854775807) 'i8'
uint8 无符号整数,0 至 255 'u1'
uint16 无符号整数,0 至 65535 'u2'
uint32 无符号整数,0 至 2 ** 32 - 1 'u4'
uint64 无符号整数,0 至 2 ** 64 - 1 'u8'
float16 半精度浮点数:16位,正负号1位,指数5位,精度10位 'f2'
float32 单精度浮点数:32位,正负号1位,指数8位,精度23位 'f4'
float64 双精度浮点数:64位,正负号1位,指数11位,精度52位 'f8'
complex64 复数,分别用两个32位浮点数表示实部和虚部 'c8'
complex128复数,分别用两个64位浮点数表示实部和虚部 'c16'
object_ python对象 'O'
string_ 字符串 'S'
unicode_ unicode类型 'U'
-
默认的数据类型:
import numpy as np a1 = np.array([1,2,3]) print(a1.dtype) # 如果是windows系统,默认是int32 # 如果是mac或者linux系统,则根据系统来
-
以下修改dtype(astype)
import numpy as np a1 = np.array([1,2,3]) print(a1.dtype) # window系统下默认是int32 # 以下修改dtype a2 = a1.astype(np.int64) # astype不会修改数组本身,而是会将修改后的结果返回 print(a2.dtype)
-
指定dtype:
import numpy as np a1 = np.array([1,2,3],dtype=np.int64) 或者 a1 = np.array([1,2,3],dtype="i8") print(a1.dtype)
-
ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
# ndarray.ndim: 查看数组的维数 b1 = np.array([[1, 5, 9], [8, 7, 6]]) print(b1.ndim) # 2
-
shape 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
b1 = np.array([[1, 5, 9], [8, 7, 6]]) print(b1.shape) # (2, 3) 表示二行三列,并且看元祖里面有几个数,那就是几维数组
-
reshape
重新修改数组的维数
b3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) # 三维数组 print(b3) """ [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] """ print(b3.reshape((2, 6))) """ [[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]] """
-
ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
b1 = np.array([[1, 5, 9], [8, 7, 6]]) # 这个是个二维数组,可以看它的最外层有几个括号"[]", 这个数组外面有两个括号,所以它就是二维数组 print(b1.size) # 6, 因为上面数据有6个
2 .数组创建
(1)array函数
你可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。
# 1.通过array来创建数组
a = np.array([0, 1, 2, 6, 10]) # 参数为一个列表
print(a) # [ 0 1 2 6 10]
(2)通过arange创建
-
创建一维数组
b = np.arange(1, 10) print(b) # [1 2 3 4 5 6 7 8 9] b = np.arange(1, 10, 2) # 和range一样,第一个为起始位置,第二个位结束位置,第三个位置为步长 print(b) # [1 3 5 7 9]
-
创建二维数组
a = np.arange(9).reshape(3, 3) print(a) """ [[0 1 2] [3 4 5] [6 7 8]] """
注意:arange创建的一维数组,里面的数字个数得和reshape的一样
(3)通过random创建
-
一维
c = np.random.random(10