Numpy数组

819 阅读19分钟

一、对 Numpy 认识

Numpy 是用于数据科学计算的基础,不但能够完成科学计算任务,还能被用作高效地多 维数据容器。用于存储和处理大型矩阵

Python 提供了一个 array 模块,和 list 不同,它直接保存数值,但是由于 Python 的 array 模块不支持多维,也没有各种运算函数

Numpy 弥补了这一遗憾,Numpy 提供了一种数组对象---ndarray(下文统称数组)

关于 ndarray 数组对象的认识:

是一种内存连续的、存储单一数据类型的、可以存储多维数组的对象

存在两种存储方式:

C 风格存储(C 语言风格) ----行优先存储

F 风格存储(Fortran 语言风格)---列优先存储

二、数组创建

1、Numpy.array 函数创建一维或多维数组

numpy.array (object,dtype=None,copy=True,order='K',subok=False,ndmin=0)

参数名称 说明
object 接收 array,表示想要创建的数组,无默认
dtype 接收 data-type。表示数组所需的数据类型。如果未给定,则选择保存对象 所需的最小类型。默认为 None
ndmin 接收 int,指定生成数组应该具有的最小维数,默认为 None

三、数组属性

Ndarray 是一个数组对象,对象都拥有以下属性:

属性 说明
ndim 返回 int,表示数组的维数
shape 返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m)
size 返回 int,表示数组的元素总数,等于数组形状的乘积
dtype 返回 data-type,描述数组中元素的类型
itemsize 返回 int,表示数组的每个元素的大小(以字节为单位)

其中 shape 及 ndim 属性,可以参考下图来理解:

代码实现:

# 1、导包
import numpy as np

# 2、创建数组
# 可以使用np.array将列表对象转化ndarray数组对象
# arr = np.array([1, 2, 3, 4])
# print('arr:\n', arr)  # [1 2 3 4]
# print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>

#
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 0]])
print('arr:\n', arr)
#  [[1 2 3 4]
#  [5 6 7 8]]

print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>
print('*' * 100)

# arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 0]],[[1, 2, 3, 4], [5, 6, 7, 0]]])
# print('arr:\n', arr)
# #  [[1 2 3 4]
# #  [5 6 7 8]]
#
# print('arr 类型:\n', type(arr))  # <class 'numpy.ndarray'>
# # print('*' * 100)

# 3、研究数组对象属性
# ndim shape size dtype itemsize
print('arr 的 ndim属性:', arr.ndim)  # 数组的维度
print('arr 的 shape属性:', arr.shape) # 数组的形状,元组类型
print('arr 的 size 属性:', arr.size)  # 数组中元素的个数
# print('arr 的&emsp;dtype 属性:', arr.dtype)  # 数组中元素的数据类型 int32 --->numpy中的数据类型 --->32位平台的int类型
# print('arr 的 itemsize 属性:', arr.itemsize) # 每一个元素的占位大小,单位为字节


# ndim  shape  size
# len(shape) = ndim
# size = shape中元素的乘积

四、数据元素类型

在实际业务数据处理时,为了更精确的计算结果,需要使用不同的数据类型,Numpy 极大程度地扩充了原生python数据类型,其中大部分数据类型是以数字结尾的,这个数字表 示在内存中占有的位数,同时强调一点,在Numpy中,所有数据类型都是同质的,即数组中的所有元素类型必须是一致的,这样做的好处是,更容易确定该数组所需要的存储空间

如下表展示:

类型 描述
bool 用一位存储的布尔类型(值为 TRUE 或 FALSE)
inti 由所在平台决定其精度的整数(一般为 int32 或 int64)
int8 整数,范围为−128 至 127
int16 整数,范围为−32768 至 32767

对于数组元素类型的使用,可以在创建数组的时候,通过 dtype 参数来指定数组的元素 类型,如:在创建全部为 0,全部为 1 的数组的时候,就可以使用 dtype 参数

其实,numpy 中的数据类型也可以进行强制转换,也可以进行存储复合的数据,如:

import numpy as np

# numpy中的数据类型
# ---封装了Python中的数据类型,并进行了细致划分 ---->变为了numpy.数据类型
# np.int32  np.int64  np.float32 np.float64 .......

# (1) 可以在创建数组的 时候通过dtype参数来指定创建的数组的类型
arr = np.array([1, 2, 3, 4], dtype=np.float64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

arr = np.array([1, 2, 3, 4], dtype=np.int64)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

# 创建一个bool数组
# 注意:0代表False   非0代表True
arr = np.array([1, 2, 3, 0], dtype=np.bool)
print('arr:\n', arr)  # [ True  True  True False]
print('arr 类型:\n', type(arr))
print('arr 的元素的类型:\n', arr.dtype)

# (2) 也可以进行数据的强转换
print('将数值转化为bool类型:',np.bool(1))
print('将整型数据转化为float类型:',np.float32(3))
# print('将字符串a转化为float类型:',np.float64('a')) # 错误的
print('将字符串10转化为float类型:',np.float64('10'))

# # (3)了解、知道:ndarray可以存储不同类型的数据 --->转化 ---对象类型
# # 存储 ---个人信息---姓名(str) height(float) weight(float)
# # 通过自定义dtype来实现
df = np.dtype([('name', np.str, 20), ('hight', np.float64), ('weight', np.float32)])
#
# # 使用df 来创建数组
info = np.array([('bq', 168.0, 65.0), ('nl', 178.0, 70.0), ('yf', 173.0, 63.0)], dtype=df)

print('info:\n', info)
print('info 维度:\n', info.ndim)
print('info 形状:\n', info.shape)
print('info 类型:\n', info.dtype)  # [('name', '<U20'), ('hight', '<f8'), ('weight', '<f4')]
#
# #
print('info 每一个元素的大小:', info.itemsize)  # 92
# # 现在是以数据对象作为 数组info  --->保证足够的空间

# ndarray 数组--->存储单一数据类型的数据 ---->科学运算
# 如果想要存储 ---整个数据对象--->后续会有更专业的结构来存储

但是,复合的数据存储的时候,也是以对象的形式进行存储,其每一个对象所占的内存大小都是一样,而且,一般情况下,我们也不会使用这样的结构去存储数据,因为后续我们有专门的类型来存储

五、特殊函数的数组创建

1、固定值数组的创建

1、 Numpy.arange 函数创建一维数组

numpy.arange(start=None, stop=None, step=None, dtype=None)

参数名称 说明
start 接收 int,表示开始位置
stop 接收 int,表示结束位置
step 接收 int,表示步长,默认为 1。如果开始位置为 0,并且步长为 1 时,此时 开始与步长可以同时省略
dtype 接收 data-type,表示数组所需的数据类型。如果未给定,则选择保存对象 所需的最小类型,默认为 None

代码实现:

# 1、使用np.arange 来创建一维数组
# 参数1 : 开始位置
# 参数2 : 结束位置(默认不包含结束位置)
# 参数3 : 步长
arr = np.arange(1, 8, 2)
# 注意:如果步长为1,步长可以省略
arr1 = np.arange(1, 8)
# 注意:如果开始位置为0,且步长为1 ,那么此时,开始与步长都可以省略
arr2 = np.arange(5)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

2、 Numpy.linspace 函数来创建等差数组

Numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数名称 说明
start 接收 int,表示开始位置
stop 接收 int,表示结束位置
num 接收 int,生成数组的元素的个数,默认为 50
endpoint 接收 boolean 类型,默认为 True,表示包含结束位置

代码实现:

# 2、使用np.linspace来创建一个等差数组
# 等差数组----> 有序序列,且后一个元素 - 前一个元素的差值是恒定的
# start : 开始位置
# end : 结束位置
# num :默认为50,指的是创建的数组的元素个数
# endpoint : 默认为True,指的是包含结束位置
arr = np.linspace(1, 6, 5)
print('arr:\n', arr)
print('arr:类型:\n', type(arr))

3、 Numpy.logspace 函数来创建等比数组

Numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

参数名称 说明
start 接收 int,表示开始位置
stop 接收 int,表示结束位置
num 接收 int,生成数组的元素的个数,默认为 50
endpoint 接收 boolean 类型,默认为 True,表示包含结束位置
base 底数,默认为 10.0

代码实现:

# 3、使用np.logspace创建一个等比数组
# 等比数组 --->有序序列, 且后一个元素 / 前一个元素的比值是恒定的
# start : 开始位置
# end : 结束位置
# num : 默认为50,指的是创建的数组的元素的个数
# endpoint :默认为True,指的是包含结束位置
# base : 默认为10 ,指的是底数
arr = np.logspace(0, 1, 3)  # 指的是从10^0  到  10^1 创建一个长度为3的等比数组
arr1 = np.logspace(0, 2, 3, base=2)  # 指的是从2^0 到 2^2 创建一个长度为3的等比数组
print('arr:\n', arr1)
print('arr 类型:\n', type(arr1))

4、 Numpy.zeros 函数创建全部为 0 的数组

Numpy.zeros(shape, dtype=None, order='C')

参数名称 说明
shape 接收元组,表示生成数组的形状
dtype 接收 data-type。表示数组所需的数据类型

代码实现:

# 4、使用np.zeros来创建一个全部为0的数组  ----占位
# shape : 创建的数组的形状
arr = np.zeros((2, 3))
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

5、 Numpy.ones 函数创建全部为 1 的数组

Numpy.ones(shape, dtype=None, order='C')

参数名称 说明
shape 接收元组,表示生成数组的形状
dtype 接收 data-type。表示数组所需的数据类型

代码实现:

# 5、使用np.ones创建一个全部为1的数组 ---占位
# shape:创建的数组的形状
arr = np.ones((2, 2, 3))
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

6、 Numpy.diag 函数创建类似对角矩阵的数组

Numpy.diag(v, k=0)

参数名称 说明
v 接收 array 或者 list

代码实现:

# 6、使用np.diag来创建一个类似于对角矩阵的数组
arr = np.diag(v=[1, 2, 3, 4], k=0)
arr1 = np.diag(v=[1, 2, 3, 4], k=-2)
# 当v 为一维时,k=0, 此时v即为创建的对角数组的对角线元素
# 当v 为一维时,k!= 0, 此时 是将 v指定的元素 向上或向下移动k个单位
v = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print('v:\n', v)
arr2 = np.diag(v=v, k=0)
arr3 = np.diag(v=v, k=1)
# # 当v 为二维时,k=0时,获取的是v的对角线位置元素组成的数组
# # 当v 为二维时,k !=0 , 获取的是 v 对角线位置,然后沿着对角线 移动k个单位所处的元素
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

7、 Numpy.eye 函数创建一个类似于单位矩阵的数组

Numpy.eye(N, M=None, k=0, dtype=float)

参数名称 说明
N 生成数组的行数,默认生成一个行数与列数相等的类似于单位矩阵的数组
dtype 接收 data-type。表示数组所需的数据类型

代码实现:

# 8、使用np.eye来创建一个类似于单位矩阵的数组
# # N :行数
# # M 默认为None,指的是列数
# # 如果N,M 传递一个参数,默认N=M=传递的参数
arr = np.eye(3, k=0)
arr1 = np.eye(N=3, M=4, k=0)
arr2 = np.eye(N=4, M=3, k=0)
# # 如果N M 不相等,也会生成一个类似于单位矩阵的数组(注意)
# # 如果k !=0 时,对角线上的1 会上下移动k个单位
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
2、随机值数组创建

手动创建数组往往达不到要求,Numpy 提供了强大的生成随机数的功能

1、创建一个[0,1)的均匀分布的随机数组

均匀分布:

可以使用:np.random.random

参数名称 说明
size 接收 int 或者元组,表示生成数组的元素或者生成数组的形状

代码实现:

# 1、使用 np.random.random 来创建一个[0,1)均匀分布的数组
# 均匀分布
# 参数size : 可以是指定创建的数组的元素个数,也可以为创建的数组的形状
arr = np.random.random(10)
arr1 = np.random.random((2,3))
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

也可以使用 np.random.rand

参数名称 说明
*dn 接收可变参数,一般为生成数组的元素的个数或者生成数组的行、列数

代码实现:

# 也可以使用np.random.rand来创建一个[0,1)服从均匀分布的数组
# 参数: 可以是创建的数组的元素个数,也可以是创建的数组的行、列数,但是不能为形状
arr = np.random.rand(10)
# arr1 = np.random.rand((2,3)) # 错误的,不能为形状
arr2 = np.random.rand(2, 3)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

2、创建一个符合标准正态分布的数组

可以使用 np.random.randn 来创建一个符合标准正态分布的数组

标准正态分布:

参数名称 说明
*dn 接收可变参数,一般为生成数组的元素的个数或者生成数组的行、列数

代码实现:

# 2、可以使用np.random.randn来创建一个服从标准正态分布的数组
# 标准正态分布
# 参数: 可以是创建的数组的元素个数,也可以是创建的数组的行、列数,但是不能为形状
arr = np.random.randn(10)
# arr = np.random.randn((2,3)) # 错误的,不能为形状
arr1 = np.random.randn(2,3)
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

3、创建一个指定范围内的随机整数数组

可以使用 np.random.randint 来创建指定范围内[low,high)的随机整数数组

np.random.randint(low, high=None, size=None, dtype='l')

参数名称 说明
low 接收 int,表示生成随机整数数组的范围的最小值
high 接收 int,表示生成随机整数数组的范围的最大值,默认不包含最大值,所 以注意:low<high
size 接收 int 或者元组,表示生成随机整数数组的元素个数或者生成随机整数数 组的形状
dtype 接收 data-type。表示数组所需的数据类型

代码实现:

# 3、使用np.random.randint 来创建一个 [low,high)的随机整数数组
# low :最小值
# high:最大值(不包含)
# size: 可以是创建的数组的元素个数,也可以是创建的数组的形状
arr = np.random.randint(low=1, high=10, size=10)
arr1 = np.random.randint(low=1, high=10, size=(2, 3))
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

# 4、可以np.random.uniform来创建[low,high)随机小数数组
# 随机分布:落在各个区间内的概率是相同的
# low :最小值
# high :最大值(默认不包含)
# size :以是创建的数组的元素个数,也可以是创建的数组的形状
arr = np.random.uniform(low=0.0, high=1.0, size=10)
arr1 = np.random.uniform(low=0.0, high=1.0, size=(2,3))
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

也可以使用 random 模块进行其他随机数的生成

函数 说明
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列或返回一个随机排列的范围
shuffle 对一个序列进行随机排序
binomial 产生二项分布的随机数
normal 产生正态(高斯)分布的随机数
beta 产生 beta 分布的随机数
chisquare 产生卡方分布的随机数
gamma 产生 gamma 分布的随机数

六、数组索引

1、一维数组索引

import numpy as np

# # 创建一个一维数组
arr = np.array([2, 3, 1, 5, 6, 4, 0])
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
#
# # 获取 arr 中  1 元素 --下标
print('获取arr 中的 1 元素:', arr[2])
#
# # 获取 arr 中的 4 元素  --下标
print('获取 arr 中的 4 元素:', arr[-2])
#
# # 获取 arr 中  1 元素  ---切片
print('获取 arr 中的 1元素:', arr[2:3:1])
#
# # 获取 arr 中的 4 元素 ---切片
print('获取 arr 中的 4 元素:', arr[-2:-1:1])
#
# # 获取 arr 中的 1 和 4 元素 ---切片 ---->下标是有规律的
print('获取 arr 中的 1和4 元素:', arr[2:-1:3])
#
# # 获取 arr 中的 1 和 5  和 4 元素 --下标列表
print('获取 arr 中 1  和  5  和 4 元素:', arr[[2, 3, -2]])
#
# # 索引元素的时候,使用下标,会造成数据维度降低
# # 使用切片不降低维度
# # 使用下标列表---->分别获取下标列表里面各个下标的值 --->再组合起来

2、二维数组索引

# 创建二维数组
arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8],
                [9, 10, 11, 12],
                [13, 14, 15, 16]])
print('arr:\n', arr)
print('arr 类型:\n', type(arr))

# 获取 arr 里面的 6 元素 --下标
print('获取 arr&emsp;里面的 6元素:', arr[1, 1])

# 获取 arr 里面的 15 元素 --下标
print('获取 arr 里面的 15 元素:', arr[3, -2])

# 获取 arr 里面的 6 元素 --切片
print('获取 arr&emsp;里面的 6元素:', arr[1:2, 1:2])

# 获取 arr 里面的 15 元素 -切片
print('获取 arr 里面的 15 元素:', arr[-1:, -2:-1])

# 获取 arr 里面的 [6 8 10 11] 元素 --下标列表 --   前后一一对应
print('获取 arr 里面的 [6 8 10 11] 元素:', arr[[1, 1, 2, 2], [1, 3, 1, 2]])
# 下标列表 ---分别获取对应下标的值 --再进行组合

# 获取 arr&emsp;里面的
# [[6  7]
#  [10 11]] 元素 ---切片---下标有规律的
print('获取 arr 里面的多个元素:\n', arr[1:3, 1:3])

3、多维数组索引

# 创建二维数组
arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8],
                [9, 10, 11, 12],
                [13, 14, 15, 16]])
print('arr:\n', arr)
print('arr 类型:\n', type(arr))
# arr三维数组----> arr[块,行,列]
# arr n维数组 ----> arr[n-1个逗号] n-1个逗号将各个维度分开,在各个维度上分别索引


# 利用高维度数组 是由 低维度数组组成 ---这一思路
# 获取arr 里面的6 元素
print('arr里面的6元素:',arr[1][1])


# 利用bool数组索引 ---干掉False 保留True
# 注意:bool数组的长度必须 要和你 索引的维度 的大小相同
# 先创建一个bool数组
mask = np.array([0, 1, 1, 0], dtype=np.bool)
# print('mask:', mask)
# 利用mask来索引二维数组
print('bool数组索引:\n', arr[mask, :])
print('bool数组索引:\n', arr[:, mask])
print('bool数组索引:\n', arr[mask, mask]) # 同行列都是下标列表的理解方式相同
print('bool数组索引:\n', arr[[False, True, True, False], [False, True, True, False]])

七、数组形状变换

Ndarray 数组的形状可以通过 shape 属性来获取,返回一个 tuple 类型的形状

关于形状,可以在创建数组的时候可以通过shape参数来指定创建数组的形状,如在上 面创建全部为 0,全部为1的数组的过程中,使用了shape参数指定创建数组的形状

那么一旦数组已经创建,那么如何来修改数组的形状呢?

可以使用 shape 属性重新赋值来更改已定数组的形状,如:

1、基于 shape 属性变换

代码实现:

import numpy as np

# 创建一个一维数组
arr = np.arange(6)
print('arr:\n', arr)

# 将arr 的形状 修改 二维
# 1、shape 属性重新赋值
arr.shape = (2, 3)
print('arr:\n', arr)
print('arr:\n', arr.shape)

2、基于 reshape 函数变换

可以使用 reshape 函数来进行数组已定形状的更改

代码实现:

# 创建一个一维数组
arr = np.arange(6)
print('arr:\n', arr)
# 2、是用reshape方法来修改形状
arr = arr.reshape((2, 3))
print('arr:\n', arr)
print('arr:\n', arr.shape)
# reshape与shape最大的区别在于reshape返回新的数组,而shape是直接对原数组产生修改

# 注意:reshape((-1,1)) # -1在此时的作用是占位作用,只要保证将arr转化为二维且为1列
arr = arr.reshape((-1, 1))
print('arr:\n', arr)
print('arr:\n', arr.shape)

# 注意:转换形状的时候,元素的个数不能改变,否则报错

但是,值得注意的是:在修改已定数组的形状的时候,必须要保证修改前的元素个数必 须和修改之后的元素个数相等,否则报错

此时还需要注意一种情况,就是 reshape((-1,1))这样的情况

那么在学习完数组创建 api 及 reshape 的情况下,就可以使用 np.arange 和 reshape 连用来创建一个高维度数组

代码实现:

# 使用 np.arange 和 reshape连用来创建高维度数组
arr = np.arange(16).reshape((4, 4))
print('arr:\n', arr)

3、基于 np.flatten 与 np.ravel 函数变换

那么思考一个问题:可以使用 np.arange 和 reshape

可以创建高维度数组,那么如何将 高维度数组展开为一维呢?

(1)shape 属性重新赋值

(2)reshape 也可以

(3)可以使用 np.flatten 与 np.ravel 来将高维度数组展开为一维,

代码实现:

# 如何又将高维度数组展开为一维呢???
# 1、shape属性重新赋值
arr.shape = (-1,)  # -1 是占位作用
print('arr:\n', arr)
# 2、reshape 方法
arr = arr.reshape((-1,))
print('arr:\n', arr)
# 使用 np.arange 和 reshape连用来创建高维度数组
arr = np.arange(16).reshape((4, 4))
print('arr:\n', arr)
# 3、flatten 方法 ---复制一份内存
arr = arr.flatten('C')
arr1 = arr.flatten('F')
print('arr:\n',arr)
print('arr:\n',arr1)
# 4、ravel 方法  ---不复制
arr = arr.ravel('C')
arr = arr.ravel('F')
print('arr:\n', arr)

八、数组合并和拆分

1、数组合并

可以使用 np.hstack、np.vstack、np.concatenate 来进行数组的拼接合并

axis轴的方向如图:

代码实现:

import numpy as np

# 创建数组1
arr1 = np.array([[1, 2], [3, 4]])
# 创建数组2
arr2 = np.zeros((2, 2), dtype=np.int32)

print('arr1:\n', arr1)

print('arr2:\n', arr2)
print('*' * 100)

# 向右拼接 ---水平拼接
all_arr = np.hstack((arr1, arr2))
print('all_arr:\n', all_arr)

# 向下拼接 ---垂直拼接
all_arr = np.vstack((arr1, arr2))
print('all_arr:\n', all_arr)

#  可以使用np.concatenate实现向右 向下的拼接
# axis --->轴的方向
# axis = 0 --->行的方向  --->向下  --- np.vstack
all_arr = np.concatenate((arr1, arr2), axis=0)
print('all_arr:\n', all_arr)

# axis=1 ---->列的方向  ---->向右 ---np.hstack
all_arr = np.concatenate((arr1, arr2), axis=1)
print('all_arr:\n', all_arr)

2、数组拆分

可以使用 np.hsplit、np.vsplit、np.split 来将数组进行拆分

代码实现:

# 拆分
# 创建一个大的二维数组
arr = np.arange(16).reshape((4, 4))
print('arr:\n', arr)

# 拆分
# ---vsplit   -- 将行的方向进行拆分--(将行的方向进行打断)
# ---hsplit   -- 将列的方向进行拆分--(将列的方向进行打断)
# 注意:此时为平均拆分,需要被整除
split_res = np.vsplit(arr, 2)
print('split_res:\n',split_res)

split_res = np.hsplit(arr, 2)
print('split_res:\n', split_res)


# split ---同 vsplit
split_res = np.split(arr, 2, axis=0)
print('split_res:\n',split_res)

# split --同 hsplit
split_res = np.split(arr, 2, axis=1)
print('split_res:\n', split_res)

# 注意:在拆分的时候,这样指定
#  :1,1:3,3: --->三部分
# arr[:1,:]
# arr[1:3,:]
# arr[3:,:]
split_res = np.split(arr, [1, 3], axis=0)
print('split_res:\n', split_res)

# 注意:一般不使用拆分 ---如果真要想获取部分数据---使用数组索引
# 获取前3列为一部分 ,最后1列为一部分
split_res_1 = arr[:, :3]
split_res_2 = arr[:, -1:]
print('split_res_1:\n', split_res_1)
print('split_res_2:\n', split_res_2)

注意:

# 注意:一般不使用拆分 ---如果真要想获取部分数据---使用数组索引
# 获取前3列为一部分 ,最后1列为一部分
split_res_1 = arr[:, :3]
split_res_2 = arr[:, -1:]
print('split_res_1:\n', split_res_1)
print('split_res_2:\n', split_res_2)
# # 如:不想要某列数据 --->bool数组索引
# # 创建一个数组
arr = np.arange(12).reshape((2, 6))
print('arr:\n', arr)
#
# # 创建bool数组
mask = np.array([1, 1, 0, 1, 0, 1], dtype=np.bool)
print('mask:\n', mask)
#
# # 进行筛选
res = arr[:, mask]
print('res:\n', res)