蓝绝

博客园 首页 新随笔 联系 订阅 管理

    3.变形

     使用reshape函数,注意参数是一个tuple!

#产生0-10的随机整数
arr6 = np.random.randint(0,10,size=(20)) 
arr6
array([2, 8, 9, 6, 2, 6, 6, 1, 0, 1, 3, 5, 1, 3, 8, 5, 0, 8, 0, 8])
#变为4行5列多维数组,注意原数组个数,不够了会报错
arr6.reshape((4,5))
array([[2, 8, 9, 6, 2],
       [6, 6, 1, 0, 1],
       [3, 5, 1, 3, 8],
       [5, 0, 8, 0, 8]])

4.级联   意思指把多个独立的数组相连

1. np.concatenate()级联需要注意的点:
2.级联的参数是列表:一定要加中括号或小括号

3.维度必须相同

4.形状相符

5. 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向

6.可通过axis参数改变级联的方向

1,第一种连接方式  np.concatenate((arr7, arr8), axis=1)

arr7 = np.random.randint(0,10,size=(3,3)) 
arr8 = np.random.randint(0,10,size=(3,4)) 
display(arr7,arr8)        #display 调整输出格式,整齐一点
array([[2, 2, 3],
       [2, 4, 2],
       [7, 6, 6]])
array([[5, 1, 6, 6],
       [5, 4, 6, 8],
       [6, 6, 3, 8]])
#使用axis控制连接方向, axis指的是连接的维度
#注意 连接的多维数组连接方向数据长度必须相同否则会报错
np.concatenate((arr7, arr8), axis=1)   #axis  1横着连 0竖着连
array([[2, 2, 3, 5, 1, 6, 6],
       [2, 4, 2, 5, 4, 6, 8],
       [7, 6, 6, 6, 6, 3, 8]])

1,第2种连接方式   np.hstack与np.vstack

    水平级联与垂直级联,处理自己,进行维度的变更,

#  hstack 横向连接 ,注意双()
arr9= np.random.randint(0,10,size=(3,3)) 
arr10 = np.random.randint(0,10,size=(3,3)) 
np.hstack((arr9,arr10))
array([[3, 7, 0, 6, 0, 2],
       [0, 2, 1, 4, 9, 8],
       [2, 3, 4, 7, 5, 8]])
#  vstack 垂直连接  注意双()
np.vstack((arr9,arr10))
array([[3, 7, 0],
       [0, 2, 1],
       [2, 3, 4],
       [6, 0, 2],
       [4, 9, 8],
       [7, 5, 8]])

5.切分

与级联类似,三个函数完成切分工作:
npisplit

np.vsplit

np.hsplit

-------------------------------------------

arr11=np.random.randint(0,100,size=(3,6))
arr11
array([[45, 23, 60, 96, 68,  5],
       [44, 27, 94, 88, 35, 57],
       [84, 62, 71, 62, 66, 20]])
# indices_or_sections=3 表示3等分
#注意 数组必须刚好等分,否则报错
part1,part2,part3=np.split(arr11,indices_or_sections=3,axis=1)
display(part1,part2,part3)
array([[45, 23],
       [44, 27],
       [84, 62]])
array([[60, 96],
       [94, 88],
       [71, 62]])
array([[68,  5],
       [35, 57],
       [66, 20]])
# 非等分方式分割
#indices_or_sections=[m, n] 表示的范是0:m, m:n, n:
part1,part2,part3=np.split(arr11,indices_or_sections=[2,5],axis=1)
display(part1,part2,part3)
array([[45, 23],
       [44, 27],
       [84, 62]])
array([[60, 96, 68],
       [94, 88, 35],
       [71, 62, 66]])
array([[ 5],
       [57],
       [20]])
# 非等分方式分割,垂直分:hsplit,没有axis  或者axis=0
part1,part2,part3=np.split(arr11,indices_or_sections=[1,2])
display(part1,part2,part3)
array([[45, 23, 60, 96, 68,  5]])
array([[44, 27, 94, 88, 35, 57]])
array([[84, 62, 71, 62, 66, 20]])

6.副本   #拷贝数组处理数据,避免对原数组产生影响

所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。
可使用copy()函数创建副本

#拷贝数组处理数据,避免对原数组产生影响
copy_array = arr.copy()
posted on 2022-11-13 15:20  蓝绝  阅读(37)  评论(0编辑  收藏  举报