Numpy学习手册
Numpy入门
Numpy是数据分析的基础性第三方库,对于python的学习来说是必备的。Pandas是在Numpy的基础上,对数据再进行封装。
1. 创建ndarray数组
1.1 创建一维ndarray数组
函数:
- np.array(data)
- np.arange(number).reshape(m, n, p)
属性:arr是一个ndarray数组
- arr.shape:返回元组
- arr.dtype:返回数值类型
- arr.ndim:返回数组有几维
- arr.size:返回数组中有几个数值
- arr.itemsize:返回每个数组元素的长度(以字节为单位)
对于python所支持的不同基础类型数据data:列表、元组,都可以用转化成Numpy形式的ndarray数据结构。
data1 = [5, 7, 9, 20] #列表
arr1 = np.array(data1)
data2 = (5, 7, 9, 20) #元组
arr2 = np.array(data2)
print(arr1)
print(arr2)
#====结果====
array([ 5, 7, 9, 20])
array([ 5, 7, 9, 20])
1.2 创建多维ndarray数组
- 数组中的数据必须是规整的,即:在输入时,每行数据的个数必须相同。
- 可以使用嵌套列表的形式,再进行转换。
- 当数组中的数据类型不一致的时候,会统一数据类型。
data3 = [[1, 2, 3, 4],[5, 6, 7, 8]] #多维数组
arr3 = np.array(data3)
print(arr3)
print(type(arr3))
#====结果====
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
numpy.adarray
1.3 创建有序ndarray数组
- reshape(): 第0维中有两个元素,第1维中有三个元素,第2维中有四个元素
- np.arange(n):形成一个0~23的有序序列
- 需要学会对某个数据的查询
data4 = np.arange(24).reshape(2,3,4)
print(data4)
#====结果====
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]]])
2. ndarray 对象属性
- arr.shape:返回一个(行数,列数)的元组
- arr.dtype: 返回数组中的数据类型
- arr.ndim: 返回数组中的维度
- arr.size: 返回数组中的总的元素个数
- arr.itemsize: 返回每个数组元素的长度(以字节为单位
print(arr3.shape)
print(arr3.dtype)
#====结果====
(2,3)
dtype('int32')
3. Numpy内置函数
- np.zeros((m,n,…)): 创建指定维度的数组,值都为0
- np.ones((m,n,…)):创建指定维度的数组,值都为1
- np.empty((m,n,…)):创建指定维度的数组,值为非常小的值
- np.ones_like(arr): 创建以arr为参考,值都是1的数组
- np.zeros_like(arr): 创建以arr为参考,值都是0的数组
- np.empty_like(arr): 创建以arr为参考,值都是非常小值的数组
- np.arange(m,n,#k,#dtype=‘…’): 生成一个值在m~n-1,步长k的数组(有序)
- arr.astype(np.float64):在不改变原数组的情况下,创建新数据类型的数组.
np.zeros(8)
np.zeros((3,4))
np.ones(4)
np.empty((2, 2, 2)) #非常小的值
#====结果====
array([ 0., 0., 0., 0., 0., 0., 0., 0.])
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
array([ 1., 1., 1., 1.])
array([[[0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 0.00000000e+000]],
[[0.00000000e+000, 4.07110092e-321],
[9.02193261e+217, 6.19941833e-071]]])
np.arange(10)
np.arange(5,10)
#====结果====
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([5, 6, 7, 8, 9])
4. ndarray 对象方法
- arr.reshape((m,n=-1)):reshape()不改变原数据维度
- arr.ravel():高维数组展平,不改变原数据维度
- arr.flatten():高维数组展平,不改变原数据维度
数据重塑合并
1.数组重塑
- arr.reshape((m,n,…)):reshape方法会对原有的数组进行重塑,但不会改变原数据维度
- arr.ravel()
- arr.flatten()
arr = np.arange(9)
arr.reshape((3,3))
print(arr)
#====结果====
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
arr = np.array([[3, 4, 5],[1, 2, 3]])
print(arr.shape)
print(arr.reshape((3,2))) #reshape()不改变原数据维度
arr
#====结果====
(2, 3)
[[3 4]
[5 1]
[2 3]]
array([[3, 4, 5],
[1, 2, 3]])
arr1 = np.arange(12)
arr2 = np.arange(10).reshape((5,2))
print(arr1.reshape((3,-1)))
print(arr2)
#====结果====
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
2.数组合并
- np.concatenate([arr1, arr2],axis=0) :
- np.vstack((arr1,arr2)):
- np.hstack((arr1, arr2)):
arr1 = np.arange(12).reshape(3,4)
arr2 = np.arange(12,24).reshape(3,4)
np.concatenate([arr1, arr2],axis=0)
#====结果====
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]])
np.concatenate([arr1, arr2],axis=1)
#====结果====
array([[ 0, 1, 2, 3, 12, 13, 14, 15],
[ 4, 5, 6, 7, 16, 17, 18, 19],
[ 8, 9, 10, 11, 20, 21, 22, 23]])
np.vstack((arr1,arr2))
#====结果====
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]])
np.hstack((arr1, arr2))
#====结果====
array([[ 0, 1, 2, 3, 12, 13, 14, 15],
[ 4, 5, 6, 7, 16, 17, 18, 19],
[ 8, 9, 10, 11, 20, 21, 22, 23]])
3. 数组拆分
- np.split(ary, indices_or_sections, axis=0):返回列表形式
arr = np.arange(12).reshape((6,2))
#arr
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])
np.split(arr,[2, 4])
#====结果====
[array([[0, 1],
[2, 3]]),
array([[4, 5],
[6, 7]]),
array([[ 8, 9],
[10, 11]])]
np.split(arr,[2,5])
#====结果====
[array([[0, 1],
[2, 3]]),
array([[4, 5],
[6, 7],
[8, 9]]),
array([[10, 11]])]
np.split(arr,[4,])
[array([[0, 1],
[2, 3],
[4, 5],
[6, 7]]),
array([[ 8, 9],
[10, 11]])]
#====结果====
4. 数组转置和轴变换
- arr.transpose((1,0)):参数是指新的轴编号是原来哪个轴编号
- arr.T:转置矩阵
- arr.swapaxes(1, 2):接收一对轴编号,互换
#arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr.transpose((1,0))
#====结果====
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
arr = np.arange(24).reshape((2,3,4))
#arr
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]]])
arr.transpose(2,0,1) #原数组是2*3*4,转换之后是4*2*3
array([[[ 0, 4, 8],
[12, 16, 20]],
[[ 1, 5, 9],
[13, 17, 21]],
[[ 2, 6, 10],
[14, 18, 22]],
[[ 3, 7, 11],
[15, 19, 23]]])