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()