目录
- 一、数组连接和分割
- 1.合并
- 2.分割
- 二、数组添加和删除元素
- 1.添加
- 2.插入
- 3.删除
- 三、连接数组
- 四、拆分数组
- 五、数组去重
- 六、数组排序
- 七、条件筛选
- 八、读写文件
- 1.二进制文件(NPY, NPZ)
- 2.文本文件
- 3.原始二进制文件
- 4.数据源
一、数组连接和分割
1.合并
1.按照列合并
np.hstick(tup)
tup:传入列表或者元组
return:返回合并完成的数组
2.按照行合并
np.vstick(tup)
tup:传入列表或者元组
return:返回合并完成的数组
3.指定轴的合并方式
np.concatenate((a1, a2, …), axis=0)
(a1, a2, ……):不仅仅可以传入元组,也可传入列表
axis:轴,默认值是0,是按行合并。当出入的值为1时,按照列合并
import numpy as np# 行合并
a = np.array([1, 2, 3, 4]).reshape(1, 4)
b = np.array([2, 3, 4, 5]).reshape(1, 4)
print(np.vstack([a, b]))
print(np.concatenate([a, b]))# 列合并
print(np.hstack([a, b]))
print(np.concatenate([a, b], axis=1))# 输出
[[1 2 3 4][2 3 4 5]]
[[1 2 3 4][2 3 4 5]]
[[1 2 3 4 2 3 4 5]]
[[1 2 3 4 2 3 4 5]]
2.分割
np.split(ary, indices_or_sections)
ary:传入要进行操作的数组
indices_or_sections:传入数值或者传入一个列表,当传入的是一个数值的时候,是平均分配成几组。当传入一个列表的时候,是按照索引进行分类。比如,当传入列表[3, 8, 10]时,会按照0,1,2和3,4,5,6,7和8,9和10……这个方式分组。
return:返回的是一个装有分组状况的列表
import numpy as npdata = np.arange(20)# 按照数值进行分割
print(np.split(data, 4))# 按照索引列表进行分割
print(np.split(data, [3, 8, 10]))# 输出
[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9]), array([10, 11, 12, 13, 14]), array([15, 16, 17, 18, 19])]
[array([0, 1, 2]), array([3, 4, 5, 6, 7]), array([8, 9]), array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])]
二、数组添加和删除元素
1.添加
append()函数
该函数是在数组的末尾添加元素,该函数会返回一个新数组,而原数组不变。使用 append()函 数的方法如下:
numpy.append(arr,values,axis)
对各个参数的说明:
- 参数 arr 表示输入的数组;
- values 表示向 arr 数组添加的元素,values 为数组,values 数组列维度与 arr 数组列维度相同;
- axis 表示沿着水平或竖直方向完成添加操作的轴,axis 取 0 表示沿竖直方向操作,axis 取 1 表示沿水平方向操作。
如果未提供 axis 值,在添加操作之前输入数组会被展开,values 可以是单元素,也可以是任意数组,将 values 添加到 arr 数组后,该函数会返回一个新数组,而原数组不变。
import numpy as np
arr01 = np.arange(1,25).reshape(4,6)
# arr01输出
array([[ 1, 2, 3, 4, 5, 6],[ 7, 8, 9, 10, 11, 12],[13, 14, 15, 16, 17, 18],[19, 20, 21, 22, 23, 24]])arr02 = np.arange(1,7)
# arr02输出
array([1, 2, 3, 4, 5, 6])arr03 = np.arange(1,7).reshape(1,6)
# arr03输出
array([[1, 2, 3, 4, 5, 6]])# 追加元素
np.append(arr01, arr03, axis=0)
array([[ 1, 2, 3, 4, 5, 6],[ 7, 8, 9, 10, 11, 12],[13, 14, 15, 16, 17, 18],[19, 20, 21, 22, 23, 24],[ 1, 2, 3, 4, 5, 6]])arr04 = np.ones(shape=(4,1))
# arr04输出
array([[1.],[1.],[1.],[1.]])np.append(arr01, arr04, axis=1)
array([[ 1., 2., 3., 4., 5., 6., 1.],[ 7., 8., 9., 10., 11., 12., 1.],[13., 14., 15., 16., 17., 18., 1.],[19., 20., 21., 22., 23., 24., 1.]])
2.插入
insert()函数
该函数在给定索引之前,沿给定轴在输入数组中插入值。该函数会返回一个新数组,原数组不变。使用 insert() 函数的方法如下:
numpy.insert(arr,obj,values,axis)
对各个参数的说明:
- 参数 arr 表示输入的数组;
- obj 表示在其之前插入值的索引;
- values 表示向arr数组插入的值,values值可为单元素或values数组,并且 values 数组行维度与arr数组列维度相同;
- axis 表示沿着水平或竖直方向完成插入操作的轴,axis 取 0 表示沿竖直方向操作,即在 arr 数组行索引位于 obj 的位置处插入 values 值,axis 取 1 表示沿水平方向操作,即在 arr 数组列索引位于 obj 的位置处插入 values 值。
如果未提供 axis 值,在插入之前输入数组会被展开,values 可以是单个元素,也可以是一维数组,将 values 插入到 obj 的位置处,该函数会返回一个新数组,原数组不变。
另外,insert() 函数如果传递了 axis 参数,则插入 values 值时,会以广播值数组来配输入数组,即 np.insert(arr,2,[9],axis=0),其中 values 为 [9],arr 是 2 行 4 列数组,由于 axis=0,则插入值的数组列维度与arr数组列维度相同,因此,插入值数组为 1 行 4 列的数组,也就是广播值数组 [9,9,9,9]。
np.insert(arr01, 2, [1,1,1,1], axis=1)
array([[ 1, 2, 1, 3, 4, 5, 6],[ 7, 8, 1, 9, 10, 11, 12],[13, 14, 1, 15, 16, 17, 18],[19, 20, 1, 21, 22, 23, 24]])
3.删除
delete()函数
该函数返回从输入数组中删除指定子数组的新数组,原数组不变。与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。使用 delete() 函数的方法如下:
numpy.delete(arr,obj,axis)
对各个参数的说明:
- 参数 arr 表示输入的数组;
- obj 是用整数或者整数数组表示的从输入数组中删除的子数组,obj 可以用切片 numpy.s_[start🔚step] 表示要删除的子数组范围;
- axis 表示沿着它删除给定子数组的轴,如果未提供 axis 值,则输入数组会被展开。
三、连接数组
连接意味着将两个或多个数组的内容放在单个数组中。在 SQL 中,我们基于键来连接表,而在 NumPy 中,我们按轴连接数组。我们传递了一系列要与轴一起连接到 concatenate() 函数的数组。如果未显式传递轴,则将其视为 0。
方法 | 说明 |
---|---|
numpy.concatenate(axis) | 沿现有轴连接一系列数组。 |
numpy.stack() | 沿新轴加入一系列数组。 |
numpy.block() | 从嵌套的块列表中组装一个 nd 数组。 |
numpy.vstack() | 垂直(按行)按顺序堆叠数组。 |
numpy.hstack() | 水平顺序堆叠数组(按列)。 |
numpy.dstack() | 按顺序深度(沿第三轴)堆叠数组。 |
numpy.column_stack() | 将一维数组作为列堆叠到二维数组中。 |
numpy.row_stack() | 垂直(按行)按顺序堆叠数组。 |
# 连接两个数组
import numpy as nparr1 = np.array([1, 2, 3])arr2 = np.array([4, 5, 6])arr = np.concatenate((arr1, arr2))print(arr)# 沿着行 (axis=1) 连接两个 2-D 数组
import numpy as nparr1 = np.array([[1, 2], [3, 4]])arr2 = np.array([[5, 6], [7, 8]])arr = np.concatenate((arr1, arr2), axis=1)print(arr)
四、拆分数组
拆分是连接的反向操作。连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。我们使用 array_split() 分割数组,将要分割的数组和分割数传递给它。
方法 | 说明 |
---|---|
numpy.split() | 将一个数组拆分为多个子数组,作为ary的视图。 |
numpy.array_split() | 将一个数组拆分为多个子数组。 |
numpy.dsplit() | 沿第 3 轴(深度)将数组拆分为多个子数组。 |
numpy.hsplit() | 将一个数组水平拆分为多个子数组(按列)。 |
numpy.vsplit() | 将一个数组垂直拆分为多个子数组(逐行)。 |
五、数组去重
方法 | 说明 |
---|---|
numpy.unique() | 查找数组的唯一元素。 |
data = np.array([[1,8,3,3,4],[1,8,9,9,4],[1,8,3,3,4]])#删除整个数组的重复元素
uniques = np.unique(data)
print( uniques)
array([1, 3, 4, 8, 9])#删除重复行
uniques = np.unique(data,axis=0)
print( uniques)
array([[1,8,3,3,4],[1,8,9,9,4]])#删除重复列
uniques = np.unique(data,axis=1)
六、数组排序
排序是指将元素按有序顺序排列。有序序列是拥有与元素相对应的顺序的任何序列,例如数字或字母、升序或降序。NumPy ndarray 对象有一个名为 sort() 的函数,该函数将对指定的数组进行排序。
# 对数组进行排序
import numpy as nparr = np.array([3, 2, 0, 1])print(np.sort(arr))
**注释:**此方法返回数组的副本,而原始数组保持不变。
您还可以对字符串数组或任何其他数据类型进行排序:
# 对数组以字母顺序进行排序
import numpy as nparr = np.array(['banana', 'cherry', 'apple'])print(np.sort(arr))
# 对布尔数组进行排序
import numpy as nparr = np.array([True, False, True])print(np.sort(arr))
如果在二维数组上使用 sort() 方法,则将对两个数组进行排序:
# 对 2-D 数组排序
import numpy as nparr = np.array([[3, 2, 4], [5, 0, 1]])print(np.sort(arr))
七、条件筛选
函数 | 描述 |
---|---|
msort(a) | 数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。 |
sort_complex(a) | 对复数按照先实部后虚部的顺序进行排序。 |
partition(a, kth[, axis, kind, order]) | 指定一个数,对数组进行分区 |
argpartition(a, kth[, axis, kind, order]) | 可以通过关键字 kind 指定算法沿着指定轴对数组进行分区 |
八、读写文件
1.二进制文件(NPY, NPZ)
方法 | 说明 |
---|---|
numpy.load() | 从.npy文件加载数组。 |
numpy.save() | 将数组保存为 .npy格式的二进制文件。 |
numpy.savez() | .npz将多个数组以未压缩格式保存到一个文件中。 |
numpy.savez_compressed() | .npz将多个数组以压缩格式保存到一个文件中。 |
2.文本文件
方法 | 说明 |
---|---|
numpy.loadtxt() | 从文本文件加载数据。 |
numpy.savetxt() | 将数组保存到文本文件。 |
numpy.genfromtxt() | 从文本文件加载数据,缺失值按指定处理。 |
numpy.fromregex() | 使用正则表达式解析从文本文件构造一个数组。 |
numpy.fromstring() | 从字符串中的文本数据初始化的新一维数组。 |
numpy.tofile() | 将数组作为文本或二进制文件写入文件。 |
numpy.tolist() | 将数组作为python列表返回。 |
import numpy as np
data = np.loadtxt('./data/class01.txt', delimiter=',')
dataarray([1., 2., 3., 4., 5., 6.])arr02 = np.arange(1, 25).reshape(4,6)
arr02array([[ 1, 2, 3, 4, 5, 6],[ 7, 8, 9, 10, 11, 12],[13, 14, 15, 16, 17, 18],[19, 20, 21, 22, 23, 24]])np.savetxt('./data/arr02.txt', arr02, fmt='%.4e', delimiter=',')
3.原始二进制文件
方法 | 说明 |
---|---|
numpy.fromfile() | 从文本或二进制文件中的数据构造一个数组。 |
ndarray.tofile() | 将数组作为文本或二进制文件写入文件(默认)。 |
4.数据源
方法 | 说明 |
---|---|
numpy.DataSource() | 通用数据源文件 |