Numpy中包含了一些函数用于操作数组,大致分为六类:修改数组形状,反转数组,修改数组维度,连接数组,分割数组,数组元素的添加与删除
1,修改数据形状 (数组重塑)
reshape():不改变数据的条件下修改数组形状
flatten():返回一份数组复制,对复制数组所做的修改不会影响原数组
ravel():返回展开数组(即,展开为一维数组)
(1)reshape()函数,格式如下:
numpy.reshape(arr,newshape,order='C')
arr:要修改形状的数组
newshape:新形状参数,为整数或者整数数组,新的形状应当兼容原有的形状
order: 'C'按行,'F'按列,'A'按原顺序,'k'元素在内存中的出现顺序
2
import numpy as np
a = np.arange(12).reshape(2,6)
b = a.reshape(3,4)
c = a.reshape(3,4,order = "F")
d = a.reshape(3,4,order = "A")
print('a=',"\n",a)
print('b=','\n',b)
print('c=','\n',c)
print('d=','\n',d)
# 输出
a=
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
b=
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
c=
[[ 0 7 3 10]
[ 6 2 9 5]
[ 1 8 4 11]]
d=
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
3
import numpy as np
a = np.arange(12).reshape(2,6)
a1 = a.reshape(3,4)
a2 = a.reshape(3,4,order="F")
a3 = a.reshape(3,4,order='A')
a4 = a.reshape(3,4,order="C")
a,a1,a2,a3,a4
# 输出
(array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]]),
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]),
array([[ 0, 7, 3, 10],
[ 6, 2, 9, 5],
[ 1, 8, 4, 11]]),
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]),
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]))
shape,reshape的区别
10
import numpy as np
arr1 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr1.reshape(3,4) # 不改变原数组
arr1
# 输出
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
9
arr1.shape = (4,3) # 改变原数组
arr1
# 输出
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
(2)flatten()函数,格式如下:
ndarray.flatten(order='C')
注意:修改返会的数组不会对原数据产生影响
(3)ravel()函数,格式如下:
np.ravel(a,order='C')
作用:展平的数组元素并拷贝一份,顺序通常是“C风格”,返回的时数组视图
两者区别:flatten()不会影响原始数组;ravel会影响原始数组。参数order()都与reshape()函数相同。
flatten()函数与ravel()函数的区别在于 返回复制还时视图,numpy.flatten()返回一份复制,对复制所做的修改不会影响原数组,二numpy.ravel()函数返回的是视图,对视图修改会影响原数组
4
b = np.arange(25).reshape(5,5)
b1 = b.flatten(order='C') # C是默认的
b2 = b.flatten(order='F')
b,b1,b2,type(b1)
# 输出
(array([[ 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]]),
array([ 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]),
array([ 0, 5, 10, 15, 20, 1, 6, 11, 16, 21, 2, 7, 12, 17, 22, 3, 8,
13, 18, 23, 4, 9, 14, 19, 24]),
numpy.ndarray)
5
b2[0] = 100 # 只是b2的值变了,b中的值不变
b2,b
# 输出
(array([100, 5, 10, 15, 20, 1, 6, 11, 16, 21, 2, 7, 12,
17, 22, 3, 8, 13, 18, 23, 4, 9, 14, 19, 24]),
array([[ 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]]))
6
b3 = b.ravel(order="C")
b4 = b.ravel(order="F")
b3,b4,type(b3),type(b4)
# 输出
(array([ 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]),
array([ 0, 5, 10, 15, 20, 1, 6, 11, 16, 21, 2, 7, 12, 17, 22, 3, 8,
13, 18, 23, 4, 9, 14, 19, 24]),
numpy.ndarray,
numpy.ndarray)
7
b3[0]=10 # b和b3的值都变了
b3,b
# 输出
(array([10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24]),
array([[10, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]]))
32
b4
# 输出b4
array([100, 5, 10, 15, 20, 100, 6, 11, 16, 21, 100, 7, 12,
17, 22, 100, 8, 13, 18, 23, 100, 9, 14, 19, 24])
a = np.arange(12).reshape(3,4)
a1 = a.flatten()
a,a1
# 输出a,a1
(array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]),