NumPy(或Numeric Python)是每个数据科学和机器学习项目的核心。整个数据驱动生态系统在某种程度上都依赖于NumPy及其核心功能。这使得它成为Python中构建的最重要和具有颠覆性的库之一。
考虑到NumPy由于其无与伦比的潜力在工业和学术界具有广泛的适用性,对其方法和语法有牢固的了解对于Python程序员来说是至关重要的。
然而,试图掌握NumPy库,如果你从NumPy的官方文档开始,一开始可能会感到非常令人生畏和不知所措。从常用的方法入手快速掌握NumPy。
分成两部分,下面主要从NumPy数组创建方法、NumPy数组操作方法 两方面开始,后续继续NumPy 数学运算、矩阵和向量运算、排序和搜索及统计方法的介绍。
导入库
当然,如果你想使用NumPy库,你应该先导入它。这里普遍采用的惯例是将numpy设置别名为np。我们也会偶尔使用pandas,所以让我们也导入它。为更好展现结果输出,我们引用icecream 包。
import numpy as np
import pandas as pd
from icecream import ic
NumPy数组创建方法
以下是创建NumPy数组的一些常用方法。
1.从Python列表转成Array
要将Python列表转换为NumPy数组,请使用np.array()方法:
a=[1,2,3]
ic(np.array(a))
ic(type(np.array(a)))
a = [[1,2,3], [4,5,6]]
ic(np.array(a))
a = [[1,2,3], [4,5,6]]
ic(np.array(a, dtype = np.float32))
2.创建一个全零的NumPy数组
常见的是创建一个填充了零的NumPy数组。可以使用NumPy中的np.zeros()方法来实现:
#
ic(np.zeros(5))
#
ic(np.zeros((2, 3)))
3.创建一个全为1的NumPy数组
如果你想创建一个填充了一的数组,而不是零,那么可以使用np.ones()方法:
4.创建一个单位矩阵的NumPy数组
在单位矩阵中,对角线上的元素为“1”,而除了对角线上的元素外,所有其他元素均为“0”,如下所示:
5.创建具有特定步长的等间距NumPy数组
要在给定的区间内生成等间距的值,请使用np.arange()方法:
#
ic(np.arange(10))
#
ic(np.arange(5, 11))
#
ic(np.arange(5, 11, 2))
6.创建具有特定数组大小的等间距NumPy数组
这与上面讨论的np.arange()类似,但使用np.linspace(),你可以在一个区间内生成num个数字,并且这些数字是均匀间隔的。
ic(np.linspace(start = 10, stop = 20, num = 5))
7.生成一个随机的NumPy整数数组
要生成一个随机的整数数组,请使用np.random.randint()方法:
np.random.randint(low = 5, high = 16, size = 5)
8.生成一个随机的NumPy浮点数数组
要生成随机的浮点数样本,可以使用np.random.random()方法:
np.random.random(size = 10)
9.从Pandas Series生成NumPy数组
如果你想要将Pandas Series转换为NumPy数组,你可以使用np.array()或np.asarray()方法:
s = pd.Series([1,2,3,4], name = "col")
ic(np.array(s))
ic(np.asarray(s))
NumPy数组操作方法
接下来,我们将讨论一些最广泛使用的用于操作NumPy数组的方法。
10.NumPy数组的维度数
你可以使用NumPy数组的ndarray.shape属性的np.shape()方法来确定NumPy数组的维度数,如下所示:
a = np.ones((2, 3))
print("Shape of the array - Method 1:", np.shape(a))
print("Shape of the array - Method 2:", a.shape)
11.改变NumPy数组的维度数
reshape是指在不改变数据的情况下给你的NumPy数组赋予新的形状。可以使用np.reshape()方法来改变数组的形状:
a = np.arange(10)
a.reshape((2, 5))
12.转置NumPy数组
如果你想要转置一个NumPy数组,你可以使用np.transpose()方法或者ndarray.T,如下所示:
a = np.arange(12).reshape((6, 2))
ic(a)
ic(a.transpose())
ic(a.T)
13.连接多个NumPy数组以形成一个NumPy数组
你可以使用np.concatenate()方法来连接一系列数组并得到一个新的NumPy数组:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
ic(np.concatenate((a, b), axis=0))
ic(np.concatenate((a, b.T), axis=1))
ic(np.concatenate((a, b), axis=None))
axis=0相当于np.vstack()。
axis=1相当于np.hstack()。
axis=None 相当于ndarray.flatten()。
14.展平NumPy数组
如果你想将整个NumPy数组压缩成一个单一的维度,你可以使用ndarray.flatten()方法,如下所示:
a = np.array([[1,2], [3,4]])
ic(a)
ic(a.flatten())
15.NumPy数组的唯一元素
要确定NumPy数组的唯一元素,可以使用np.unique()方法,如下所示:
a = np.array([[1, 2], [2, 3]])
ic(np.unique(a))
a = np.array([[1, 2, 3], [1, 2, 3], [2, 3, 4]])
ic(np.unique(a, axis=0))
a = np.array([[1, 1, 3], [1, 1, 3], [1, 1, 4]])
ic(np.unique(a, axis=1))
16.挤压(squeeze)NumPy数组
如果你想要从NumPy数组中移除长度为一的轴,请使用np.squeeze()方法。下面是示例:
x = np.array([[[0], [1], [2]]])
ic(x.shape)
ic(np.squeeze(x).shape)
17.将NumPy数组转换为Python列表
要从NumPy数组中获得一个Python列表,可以使用ndarry.tolist()方法,如下所示:
a = np.array([[1, 1, 3], [1, 1, 3], [1, 1, 4]])
a.tolist()
上面简单的示例了一下NumPy数组创建、NumPy数组操作的常见方法。