栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

numpy

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

numpy

NumPy

https://www.runoob.com/numpy/numpy-indexing-and-slicing.html

https://blog.csdn.net/weixin_44385465/article/details/115050077

ndarray对象

ndarray 内部结构

属性获取
import numpy as np
# 秩
np.ndim         # 即轴的数量或维度的数量                             
#形状
np.shape 	# 数组的维度,对于矩阵,n 行 m 列   
#大小
np.size 	# 数组元素的总个数,相当于 .shape 中 n*m 的值  
#元素数据类型
np.dtype 	# np 对象的元素类型    
#元素占用空间大小
np.itemsize 	# np 对象中每个元素的大小,以字节为单位
#对象内存布局
np.flags 	# np 对象的内存信息
#实部
np.real 	# np元素的实部
#虚部
np.imag 	# np 元素的虚部
#内存地址
np.data 	#包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
数组

常见数组创建

#创建空矩阵
numpy.empty(shape, dtype = float, order = 'C')
# 创建 0 矩阵
numpy.zeros(shape, dtype = float, order = 'C')
# 创建 1 矩阵
numpy.ones(shape, dtype = None, order = 'C') # 创建指定形状的数组,数组元素以 1 来填充
#创建对角矩阵     np.eye(5) 创建5行5列的二维对角阵 
numpy.eye(N, M=None, k=0, dtype=, order='C') 

#已有列表、元组创建
numpy.asarray(a, dtype = None, order = None)
# x = [1,2,3] or x = (1,2,3) 
# a = np.asarray(x)  

创建序列数组

# 根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray
numpy.arange(start, stop, step, dtype)
# 创建一个一维等差数列数组,范围是[start,stop],元素个数num。linspace翻译成线性空间?
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
# 创建一个一维等比数列数组
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
np.arange(0,12).reshape(3,4) # 创建序列数组并转换成3行4列矩阵

创建概率分布的数组

#创建shape形状的高斯(正态)分布数组
np.random.randn(shape)
#a = np.random.randn(10)
#创建均值为loc,标准差为scale,形状为size的高斯(正态)分布
np.random.normal(loc, scale, size)
#b = np.random.normal(0, 1, (2,4)) 均值为0,标准差为1,形状为(2,4)的二维数组
#创建shape形状的均匀分布数组
np.random.rand(shape)
#c = np.random.rand(2,3) 生成一个形状为(2,3)的均匀分布二维数组
#创建一个从[low, high)中随即采样的,样本数量为size的均匀分布
np.random.uniform(low, high, size)
#d = np.random.uniform(-1,1,10)
切片

索引的图示理解

高维切片

…用来表示高维情况下,选中该维度的所有数据,并与其他维度选取结果取交集

import numpy as np

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下所有元素 嵌套的切片 1:由第二个元素开始到最后一个元素,步距默认为1

# 切片 ":" 或 "..." 与索引数组组合
b = a[1:3, 1:3]    # 位于第2,3行且第2,3列部分的元素
c = a[1:3,[1,2]]   # 同上

输出结果展示:

[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]
索引
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
b = a[5] 
print(b) # 5  获取数组中第6个位置的元素

x = np.array([[1, 2],  [3, 4],  [5, 6]]) 
y = x[[0,1,2],  [0,1,0]]  # 索引结果1维
print(y)  # [1  4  5] 获取数组中(0,0),(1,1)和(2,0)位置处的元素

# 获取 4X3 矩阵中的四个角的元素
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])  
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols]  # 索引结果2维
print(y)
#获取数组中 (0,0),(0,2),(3,0),(3,2) 位置处的元素
# array([[ 0,  2],[ 9, 11]])

布尔索引

x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
x[x > 5]# array([ 6,  7,  8,  9, 10, 11])

# 使用"~" 过滤NaN  数据丢失  浮点型
a = np.array([np.nan,  1,2,np.nan,3,4,5])  
a[~np.isnan(a)]  # array([1., 2., 3., 4., 5.])

# 筛选复数  浮点型
a = np.array([1,  2+6j,  5,  3.5+5j])  
a[np.iscomplex(a)]  # array([2. +6.j, 3.5+5.j])

花式索引

x=np.arange(32).reshape((8,4))
x[[4,2,1,7]] # 原矩阵的第4,2,1,7行构成的新矩阵(第0行起计)
x[[-4,-2,-1,-7]] # 原矩阵的倒数第4,2,1,7行构成的新矩阵(第1行起计)
x[np.ix_([1,5,7,2],[0,3,1,2])] 
print(x)
print(x.shape)
print(x[[4,2,1,7]])
print(x[np.ix_([1,5,7,2],[0,3,1,2])])
# 原矩阵的第4,2,1,7行构成的新矩阵(第0行起计),并将列按0,3,1,2顺序排序
#如果np.xi_ 中输入两个列表,则第一个列表存的是待提取元素的行标,第二个列表存的是待提取元素的列标,第一个列表中的每个元素都会遍历第二个列表中的每个值,构成新矩阵的一行元素。

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]
(8, 4)
[[16 17 18 19]
 [ 8  9 10 11]
 [ 4  5  6  7]
 [28 29 30 31]]
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]
数值计算 算数运算
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b
d = a + b
print(c)
print(d)
[ 10  40  90 160]
[11 22 33 44]
广播

注:当运算中两个数组的形状不同时,numpy自动触发广播机制

a = np.array([[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b = np.array([1,2,3])
c = a + b
print(c)
[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]
统计计算
n = np.array([[1,2,3],[4,5,6],[7,8,9]])

最小值

numpy.amin(a, axis=None, ...)

print(np.amin(n)) #数组的最小值
print(np.amin(n,0)) #列最小值
print(np.amin(n,1)) #按行求最小值
1
[1 2 3]
[1 4 7]

最大值

numpy.amax(a, axis=None, ...)

np.amax(n) #数组的最大值
np.amax(n,0) #列最大值
np.amax(n,1) #按行求最大值
9
[7 8 9]
[3 6 9]

数组范围

Numpy.ptp(array,axis=None) #返回array中最大值-最小值的结果
print(np.ptp(n))
8

百分位统计

numpy.percenetile(a,q,axis=None)
#例如,第80个百分位数是这样一个值,它使得至少有80%的数据项小于或等于这个值,且至少有20%的数据项大于或等于这个值。
np.percentile(n,40) 
4.2
#中位数
numpy.median(a,axis=None)
np.median(n) 
5.0

#算数平均值
numpy.mean(a,axis=None)
np.mean(n) 
5.0

#加权平均值
numpy.averager(a,axis=None,weights=None,returned=False)
np.averager(n) 
5.0
weight = np.array([[1,2,3],[3,2,1],[1,2,3]]
print(np.average(n,weights=weight,returned=True))
#(5.111111111111111, 18.0)
#加权均值和权重和

#标准差
std = sqrt(mean(x-x.mean()**2))
print(np.std(n))
2.581988897471611

#方差
numpy.var(array)
print(np.var(n))
6.666666666666667
              
逻辑运算
score = np.random.randint(40, 100, (10, 5))
# 取出最后4名同学的成绩,用于逻辑判断
test_score = score[6:,0:5]
print(test_score)
[[69 44 54 58 61]
 [43 82 85 87 45]
 [44 54 80 76 86]
 [82 79 83 95 91]]
#布尔运算
print(test_score > 60)
[[ True False False False  True]
 [False  True  True  True False]
 [False False  True  True  True]
 [ True  True  True  True  True]]
#BOOL 赋值
test_score[test_score>60] = 1
print(test_score)
[[ 1 44 54 58  1]
 [43  1  1  1 45]
 [44 54  1  1  1]
 [ 1  1  1  1  1]]
# all , any 判断函数
#判断前两名同学的成绩[0:2, :]是否全及格
print(np.all(score[0:2, :] > 60))
False
#判断前两名同学的成绩[0:2, :]是否有大于90分的
print(np.any(score[0:2, :] > 90))
True

where三元运算符 np.logical_and()、np.logical_or()复合逻辑

 ·ore = np.random.randint(40, 100, (10, 5))
# 取出最后4名同学的成绩,用于逻辑判断
test_score = score[:4,0:4]
print(test_score)
[[98 89 76 51]
 [98 53 41 49]
 [77 41 66 85]
 [47 42 91 66]]
# #判断前四名学生,前四门课程中,成绩中大于60的置为1,否则为0
print(np.where(test_score > 60, 1, 0))
[[1 1 1 0]
 [1 0 0 0]
 [1 0 1 1]
 [0 0 1 1]]
#判断前四名学生,前四门课程中,成绩中大于60且小于90的换为1,否则为0
print(np.where(np.logical_and(test_score > 60, test_score < 90), 1, 0))
[[0 1 1 0]
 [0 0 0 0]
 [1 0 1 1]
 [0 0 0 1]]
#判断前四名学生,前四门课程中,成绩中大于90或小于60的换为1,否则为0
print(np.where(np.logical_or(test_score > 90, test_score < 60), 1, 0))
[[1 0 0 1]
 [1 1 1 1]
 [0 1 0 0]
 [1 1 1 0]] 
线性代数运算
numpy.dot()  向量结果 矩阵乘法
numpy.vdot() 标量结果,相应位置运算相乘在相加
numpy.inner  一维数组的向量内积
numpy.matmul() 两个数组的矩阵乘积
numpy.linalg.det() 计算输出矩阵的行列式
numpy.linalg.inv(a)  返回矩阵的逆矩阵
numpy.linalg.solve() 返回矩阵形式线性方程的解   
#线性代数运算
a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
#矩阵乘法
print(np.dot(a,b))

[[37 40]
 [85 92]]
#点积
print(np.vdot(a,b))
130
#数组矩阵乘积
print(np.matmul(a,b))
[[37 40]
 [85 92]]

#向量内积
x = np.array([1,2,3])
y = np.array([0,1,0])
print(np.inner(x,y))
2

#行列式
a=np.array([[1,2],[3,4]])
print(np.linalg.det(a))
-2.0000000000000004

#逆矩阵
a = np.array([[1,1,-1],[0,1,1],[0,0,1]])
print(np.linalg.inv(a))
[[ 1. -1.  2.]
 [ 0.  1. -1.]
 [ 0.  0.  1.]]

#线性方程的解       非齐次方程---->齐次方程--->求解  转换
#常见线性方程求解: AX= B   X=A^(-1)B
a = np.array([[1,1,1],[2,0,5],[2,5,-1]])
b = np.array([[6],[-4],[27]])
print(np.linalg.solve(a,b))
[[13.]
 [-1.]
 [-6.]]
print(np.dot(np.linalg.inv(a),b))
[[13.]
 [-1.]
 [-6.]]

一维情况下:numpy.vdot() numpy.inner() 效果一致

二维情况下 :numpy.dot() numpy.matmul() 效果一致

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.vdot(a,b))
print(np.vdot(a,b).shape)
()  #数值
130 #矩阵形状一致 对应位置元素相乘再相加
print(np.inner(a,b))
print(np.inner(a,b).shape)
(2, 2)#2*2矩阵
[[35 41]
 [81 95]] # 以向量的形式对应位置相乘  35 = [1,2]*[11,12] 

三维情况下 :

a = np.array([i for i in range(12)]).reshape([2,2,3])
b = np.array([i for i in range(12)]).reshape([2,3,2])
print(a)
[[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]
print(b)
[[[ 0  1]
  [ 2  3]
  [ 4  5]]

 [[ 6  7]
  [ 8  9]
  [10 11]]]
#矩阵乘法
print(np.dot(a,b))
[[[[ 10  13]
   [ 28  31]]

  [[ 28  40]
   [100 112]]]


 [[[ 46  67]
   [172 193]]

  [[ 64  94]
   [244 274]]]]
print(np.dot(a,b).shape)
(2, 2, 2, 2)
#四维结果  dot将数组a最后一维作为向量,b倒数第二维作为向量
#a 2*2个向量  b 2*2个向量  故 a*b = (2*2)*(2*2)
#eg:[[0,1,2]*[0,2,4],[0,1,2]*[1,3,5],[0,1,2]*[6,8,10],[0,1,2]*[7,9,11]] 故四个2*2矩阵
#数组矩阵乘积
print(np.matmul(a,b))
[[[ 10  13]
  [ 28  40]]

 [[172 193]
  [244 274]]]
print(np.matmul(a,b).shape)
(2, 2, 2)
#matmul 将最后两维作为矩阵的两维,相当于两个2*2矩阵----->对应位置矩阵乘法 ------>2个2 * 2结果 
#故最终呈现两个2*2矩阵
迭代 nditer迭代

nditer迭代默认顺序与数组内存步距一致,不一定行序,不一定列序

对a.T使用nditer迭代输出顺序不变

a = np.arange(6).reshape(2,3)
print(a)
[[0 1 2]
 [3 4 5]]
#默认
for x in np.nditer(a):
    print(x,end=",")
0,1,2,3,4,5,
# Fortran order,即是列序优先
for x in np.nditer(a, order='F'):
    print(x,end=",")
0,3,1,4,2,5,
# C order,即是行序优先
for x in np.nditer(a.T, order='C'):
    print(x, end=",")
0,3,1,4,2,5,
#修改矩阵中元素的值    ...所有元素
for x in np.nditer(a, op_flags=['readwrite']): 
    x[...]=2*x
print(a)
[[ 0  2  4]
 [ 6  8 10]]
广播迭代
a = np.arange(0,60,5).reshape(3,4)  
b = np.array([1, 2, 3, 4])
print(a)
[[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
for x,y in np.nditer([a,b]):  
    print ("%d:%d"  %  (x,y), end=", " )
# 数组a有12个元素,数组b有4个,当迭代时,b会广播到长度与a相等(b|a)
#应用场景:物体识别中 同一目标的不同参数值 同意mask的不同预测边界框
0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4, 


flat迭代
#如果需要操作数组中的每一个元素,可以用flat属性,该属性是一个数组元素迭代器
a = np.arange(9).reshape(3,3) 
for element in a.flat:
    print (element)
#flatten 返回一份数组拷贝,默认按行
print(a.flatten())
[0 1 2 3 4 5 6 7 8]
print(a.flatten(order='F'))
[0 3 6 1 4 7 2 5 8]
数组操作 修改数组形状
numpy.reshape(arr, newshape, order='C')
a = np.arange(8)
print(a)
[0 1 2 3 4 5 6 7]
a = a.reshape(4,2)
print(a)
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
数组展开、降维
#flatten 展开    拷贝,修改不影响原矩阵
a = np.arange(8).reshape(2,4)
print(a.flatten())
[0 1 2 3 4 5 6 7]
#ravel 展开    返回一个原数组的展开序列(视图),对其修改会相应修改原矩阵
a = np.arange(8).reshape(2,4)
print(a.ravel())
[0 1 2 3 4 5 6 7]
矩阵转置
numpy.transpose()
a = np.arange(8).reshape(2,4)
print(a)
[[0 1 2 3]
 [4 5 6 7]]
print(np.transpose(a))
[[0 4]
 [1 5]
 [2 6]
 [3 7]]
坐标轴调整

我们理解了一个数组的值,并且值所在坐标系中的位置后,再开始去变换数组中的数据,这里rollaxis和swapaxes 对数据的变换就是对坐标值的变换,变换完之后再按照顺序插回到新的数组中。

#分别获取数组中各个元素值所对应的坐标值
# 将 a 的值,从小到大打印坐标值
def print_sort_dim(A):
    # 将a的值,从小到大打印坐标值
    for value in range(0, A.size):
        x, y, z = get_dim(A, value)
        print(A[x][y][z], ":[", x, ",", y, ",", z, "]")
# 从a中拿到数字为i的几个坐标值
def get_dim(A, value):
    for x in range(0, 2):
        for y in range(0, 2):
            for z in range(0, 2):
                if A[x][y][z] == value:
                    return x, y, z
#  函数向后滚动特定的轴到一个特定位置
#arr:数组
#axis:要向后滚动的轴,其它轴的相对位置不会改变
#start:默认为零,表示完整的滚动。会滚动到特定位置。
#将数组arr所对应的axis轴 放在 start轴的前面,start轴往后移一“列”
numpy.rollaxis(arr, axis, start) 
a = np.arange(8).reshape(2,2,2)
print(a)
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]
 print_sort_dim(a)
0 :[ 0 , 0 , 0 ]
1 :[ 0 , 0 , 1 ]
2 :[ 0 , 1 , 0 ]
3 :[ 0 , 1 , 1 ]
4 :[ 1 , 0 , 0 ]
5 :[ 1 , 0 , 1 ]
6 :[ 1 , 1 , 0 ]
7 :[ 1 , 1 , 1 ]
b = np.rollaxis(a,2)
print(b)
[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]
print_sort_dim(b)
0 :[ 0 , 0 , 0 ]
1 :[ 1 , 0 , 0 ]
2 :[ 0 , 0 , 1 ]
3 :[ 1 , 0 , 1 ]
4 :[ 0 , 1 , 0 ]
5 :[ 1 , 1 , 0 ]
6 :[ 0 , 1 , 1 ]
7 :[ 1 , 1 , 1 ]
c = np.rollaxis(a,1)
print(c)
[[[0 1]
  [4 5]]

 [[2 3]
  [6 7]]] 
print_sort_dim(c)
0 :[ 0 , 0 , 0 ]
1 :[ 0 , 0 , 1 ]
2 :[ 1 , 0 , 0 ]
3 :[ 1 , 0 , 1 ]
4 :[ 0 , 1 , 0 ]
5 :[ 0 , 1 , 1 ]
6 :[ 1 , 1 , 0 ]
7 :[ 1 , 1 , 1 ]
# 交换矩阵的两个坐标轴
# 将n维数组中两个维度进行调换  注意维度不要越界
numpy.swapaxes(arr, axis1, axis2)
b = np.swapaxes(a,0,2)
print(b)
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]
print_sort_dim(b)
# 坐标 0 2 互换
0 :[ 0 , 0 , 0 ]
1 :[ 1 , 0 , 0 ]
2 :[ 0 , 1 , 0 ]
3 :[ 1 , 1 , 0 ]
4 :[ 0 , 0 , 1 ]
5 :[ 1 , 0 , 1 ]
6 :[ 0 , 1 , 1 ]
7 :[ 1 , 1 , 1 ]
c = np.swapaxes(a,1,2)
print(c)
 [[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]
print_sort_dim(c)
 0 :[ 0 , 0 , 0 ]
1 :[ 0 , 1 , 0 ]
2 :[ 0 , 0 , 1 ]
3 :[ 0 , 1 , 1 ]
4 :[ 1 , 0 , 0 ]
5 :[ 1 , 1 , 0 ]
6 :[ 1 , 0 , 1 ]
7 :[ 1 , 1 , 1 ]
维度扩展,复制扩展

broadcast_to扩展需要对维度扩展,原来是1行,可以扩展成多行,原来是2维,可以扩展到3维,但是tile是同一维度的复制,复制后两者不相关,修改其中一个不影响另一个

broadcast(x,y) # 模仿广播的对象,将y广播到x
x = np.array([[1], [2], [3]])  # 3行1列
y = np.array([4, 5, 6])        # 1行3列
b = np.broadcast(x,y)          # b 是迭代器
for x,y in b:
    print(x,y)                 #9行输出,每个x元素对应3个y元素

    
numpy.broadcast_to(array, shape, subok) 
#将数组广播到新形状。它在原始数组上返回只读视图。
#对原数组的修改会影响视图的值
a = np.arange(4).reshape(1,4)
b = np.broadcast_to(a,(4,4))
print(a)
[[0 1 2 3]]
print(b)
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

b = np.arange(6).reshape(2,3)
bb = np.tile(b, (4, 2))   # 重复 b 的各个维度,纵向4倍,横向2倍
print(b)
[[0 1 2]
 [3 4 5]]
print(bb)
[[0 1 2 0 1 2]
 [3 4 5 3 4 5]
 [0 1 2 0 1 2]
 [3 4 5 3 4 5]
 [0 1 2 0 1 2]
 [3 4 5 3 4 5]
 [0 1 2 0 1 2]
 [3 4 5 3 4 5]]

维度扩展

#在原有的维数上再增加1个维度
numpy.expand_dims(arr, axis)
# 从shape 来看 axis 新维度扩展位置




维度压缩

numpy.squeeze(arr, axis) # 从给定数组的形状中删除一维的条目
x = np.arange(9).reshape(1,3,3)
y = np.squeeze(x)
print(x.shape, y.shape)
((1, 3, 3), (3, 3)) # 厚度只有1的维会被删除

数组连接

hstack和vstack效果与concatenate相同,在原数组平面的右方或者下方进行拼接,

但stack是在原数组平面上面“堆叠”,新增了一维

#沿指定轴连接相同形状的两个或多个数组
numpy.concatenate((a1, a2, ...), axis)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.concatenate((a,b)))
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
print(np.concatenate((a,b),axis=1))
[[1 2 5 6]
 [3 4 7 8]]

#沿新轴连接数组序列
numpy.stack(arrays, axis)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.stack((a,b),0))
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
print(np.stack((a,b),1))
[[[1 2]
  [5 6]]

 [[3 4]
  [7 8]]]

print(np.hstack((a,b)))
[[1 2 5 6]
 [3 4 7 8]]
print(np.vstack((a,b)))
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
数组分割
numpy.split(ary, indices_or_sections, axis)
#ary:要切分的数组
#indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置
#axis:沿着哪个维度进行切向,默认为0,横向切分

#一维数组:
x = np.array([0,1,2,3,4,5,6,7,8])
print(np.split(x,3))
#整数  均分    [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
print(np.split(x,[3,5,6,9]))
#数组索引越界 最后为空  [array([0, 1, 2]), array([3, 4]), array([5]), array([6, 7, 8]), array([], dtype=int32)]
print(np.split(x,[3,5,6,8]))
#数组  根据数组中的元素进行切分  [array([0, 1, 2]), array([3, 4]), array([5]), array([6, 7]), array([8])]

#二维数组  整数代表均分  []代表基于该维度的划分位置
x = np.arange(16).reshape(4,4)
print(x)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
print(np.split(x,2,axis= 0))
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
print(np.split(x,2,axis= 1))
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]

print(np.split(x,[1,3],axis= 0))
# 维度不一致 每一层[]代表一个维度
[array([[0, 1, 2, 3]]), array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]
print(np.split(x,[1,3],axis= 1))
# 列 0  1,2  3  [] 中的元素代表划分位置 
[array([[ 0],
       [ 4],
       [ 8],
       [12]]), array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]]), array([[ 3],
       [ 7],
       [11],
       [15]])]

]), array([8])]

#二维数组 整数代表均分 []代表基于该维度的划分位置
x = np.arange(16).reshape(4,4)
print(x)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
print(np.split(x,2,axis= 0))
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
print(np.split(x,2,axis= 1))
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]

print(np.split(x,[1,3],axis= 0))

维度不一致 每一层[]代表一个维度

[array([[0, 1, 2, 3]]), array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]])]
print(np.split(x,[1,3],axis= 1))

列 0 1,2 3 [] 中的元素代表划分位置

[array([[ 0],
[ 4],
[ 8],
[12]]), array([[ 1, 2],
[ 5, 6],
[ 9, 10],
[13, 14]]), array([[ 3],
[ 7],
[11],
[15]])]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650092.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号