In [290]:
import numpy as np
===============================基础操作===============================
In [291]:
arr = np.array([[1,2,3],[4,5,6]], dtype='int') # 创建数组
arr
Out[291]:
In [292]:
arr[1,2] # 根据索引取值
Out[292]:
In [293]:
arr.ndim # 查看数组的维度
Out[293]:
In [294]:
arr.shape # 查看数组的行数和列数
Out[294]:
In [295]:
arr.size # 查看数组的元素个数
Out[295]:
In [296]:
# arr = np.array([1,2,3], dtype='int64') # 创建一维数组
arr = np.array([[1,2,3],[4,5,6]], dtype=np.float32) # 创建二维数组
# dtype:指定数据类型,指定类型是可以通过dtype='float32' 或 dtype=np.float32 来指定。
In [297]:
arr.dtype
Out[297]:
In [298]:
arr_zero = np.zeros([3,4]) # 生成一个3行4列的全0数组
arr_zero
Out[298]:
In [299]:
arr_one = np.ones((3,4)) # 生成一个3行4列的全1数组
arr_one
Out[299]:
In [300]:
arr_null = np.empty([2,4]) # 生成一个3
arr_null
Out[300]:
In [301]:
arr = np.arange(10,20,2) # 使用arange生成一个数组
arr
Out[301]:
In [302]:
arr = np.arange(1,21,).reshape([4,5]) # 使用arange生成一个数组,然后使用reshape()重新定义数组的行和列
arr
Out[302]:
In [303]:
arr = np.linspace(1,10,5,endpoint=False) # 在指定的间隔内返回均匀间隔的数字, endpoint:如果是真,则一定包括stop,如果为False,一定不会有stop,默认为True
arr
Out[303]:
In [304]:
arr = np.linspace(1,10,5,endpoint=True) # 在指定的间隔内返回均匀间隔的数字
arr
Out[304]:
In [305]:
arr = np.linspace(1,10,10).reshape([2,5])
arr
Out[305]:
===============================基础运算===============================
In [306]:
arr1 = np.array([1,2,5,7,9])
arr2 = np.array([2,4,6,8,10])
arr3 = np.array([1,1,1,1,1])
arr1 + arr2 # 将两个数组对应位置的元素相加
Out[306]:
In [307]:
arr1 + arr2 + arr3 # 将三个数组对应位置的元素相加
Out[307]:
In [308]:
arr1 + arr2 - arr3
Out[308]:
In [309]:
arr1 * arr2 # 将三个数组对应位置的元素相乘
Out[309]:
In [310]:
arr = np.array([10,20,30,40,50])
np.sin(arr) # 求arr中每个元素的sin值
Out[310]:
In [311]:
arr = np.array([1,3,5,7,8,9])
arr < 5 # 判断arr中的每个元素是否小于5
Out[311]:
In [312]:
arr = np.array([1,3,5,7,8,9])
arr == 5 # 判断arr中的每个元素是否等于5
Out[312]:
In [313]:
arr = np.array([[1,2],[3,4]])
arr2 = np.array([[5,6],[7,8]])
In [314]:
arr * arr2 # 对应位置上的元素相乘
Out[314]:
In [315]:
np.dot(arr,arr2) # 矩阵相乘
Out[315]:
In [316]:
arr.dot(arr2) # 矩阵相乘,和上面的方法一样
Out[316]:
In [317]:
arr = np.random.random([2,4]) # 生成2行4列的数组每个元素的范围在0到1之间
arr
Out[317]:
In [318]:
arr = np.array([i for i in range(1,13)]).reshape([3,4])
arr
Out[318]:
In [319]:
arr.sum() # 求arr数组中元素的和
np.sum(arr) # 求arr数组中元素的和
Out[319]:
In [320]:
arr.max() # 求arr数组中的最大值
Out[320]:
In [321]:
arr.min() # 求arr数组中的最小值
Out[321]:
In [322]:
arr.min(axis=1) # 求arr数组中每一行的最小值
Out[322]:
In [323]:
arr.max(axis=0) # 求arr数组中每一列的最大值
Out[323]:
In [324]:
arr.mean() # 求arr数组中元素的平局值
Out[324]:
In [325]:
arr = np.array([np.random.randint(1,11) for i in range(12)]).reshape(3,4)
arr
Out[325]:
In [326]:
np.argmin(arr) # 查找最小值的索引
Out[326]:
In [327]:
arr.argmin() # 查找最小值的索引
Out[327]:
In [328]:
arr.argmax() # # 查找最大值的索引
Out[328]:
In [329]:
arr.argmax(axis=1) # # 查找每一行最大值的索引
Out[329]:
In [331]:
arr.argmin(axis=0) # # 查找每一列最小值的索引
Out[331]:
In [332]:
arr = np.arange(1,10)
arr
Out[332]:
In [337]:
np.median(arr) # 正确的方法
# arr.median() # 错误方法
Out[337]:
In [338]:
arr.cumsum() # 累加(每个元素和前面所有元素相加)
Out[338]:
In [341]:
arr = np.array([np.random.randint(1,11) for i in range(12)])
arr
Out[341]:
In [346]:
np.diff(arr) # 累差(后面的数减去前面的数)
# arr.diff() # 错误方法
Out[346]:
In [354]:
arr = np.array([np.random.randint(0,6) for i in range(5)])
arr
Out[354]:
In [355]:
np.nonzero(arr) # 查找非零元素的索引
Out[355]:
In [356]:
arr = np.array([np.random.randint(0,6) for i in range(12)]).reshape([3,4])
arr
Out[356]:
In [357]:
np.nonzero(arr) # 查找非零元素的索引,当数组为二维数组时,返回行和列的对应
Out[357]:
In [358]:
np.sort(arr) # 按行排序
Out[358]:
In [361]:
np.sort(arr,axis=0) # 按列排序
Out[361]:
In [362]:
arr = np.array([np.random.randint(1,11) for i in range(12)]).reshape([3,4])
arr
Out[362]:
In [364]:
np.transpose(arr) # 将行和列进行转换
Out[364]:
In [365]:
arr.T # 将行和列进行转换
Out[365]:
In [369]:
arr
Out[369]:
In [371]:
np.clip(arr,5,9) # 将小于5的数变成5,将大于9的数变成9
Out[371]:
In [373]:
arr
Out[373]:
In [374]:
np.mean(arr) # 求所有元素的平均值
Out[374]:
In [375]:
np.mean(arr,axis=1) # 求每一行的平均值
Out[375]:
In [376]:
np.mean(arr,axis=0) # 求每一列的平均值
Out[376]:
In [ ]:
===============================numpy的索引===============================
In [377]:
arr = np.arange(1,13)
arr
Out[377]:
In [378]:
arr[3]
Out[378]:
In [379]:
arr = np.arange(1,13).reshape((3,4))
arr
Out[379]:
In [386]:
arr[1,3]
Out[386]:
In [382]:
arr[1][3]
Out[382]:
In [383]:
arr[1:] # 取第一行到最后的所有元素
Out[383]:
arr[行索引:列索引]¶
In [384]:
arr[1,:] # 取第一行的元素
Out[384]:
In [385]:
arr[:,1] # 取第一列元素
Out[385]:
In [407]:
arr
Out[407]:
In [411]:
arr[:,1:3] # 取每一行的第一和第二列
Out[411]:
In [413]:
arr[1:3,1:3] # 取第一行和第二行的第一和第二列
Out[413]:
In [414]:
arr
Out[414]:
In [415]:
for row in arr: # 循环打印每一行
print(row)
In [416]:
for column in arr.T: # 循环打印每一列 首先将行和列进行转换,然后在循环
print(column)
In [420]:
arr.flatten() # 转换为一维数组
Out[420]:
In [426]:
for item in arr.flatten():
print(item)
In [427]:
arr.flat # 迭代器
Out[427]:
In [428]:
np.array(arr.flat)
Out[428]:
In [429]:
for item in arr.flat:
print(item)
===============================numpy的array合并===============================
In [434]:
arr = np.array([1,1,1])
arr2 = np.array([2,2,2])
arr3 = np.array([3,3,3])
In [436]:
np.vstack((arr,arr2,arr3)) # 行合并(合并后增加行数)
Out[436]:
In [437]:
np.hstack([arr,arr2,arr3]) # 列合并(合并后增加列数)
Out[437]:
In [447]:
arr = np.array([1,2,3,4])
In [448]:
arr[:,np.newaxis] # 是每个元素变为一行
Out[448]:
In [449]:
arr[np.newaxis,:] # 时每个元素变为一列
Out[449]:
In [450]:
arr = np.array([1,1,1])[:,np.newaxis]
arr2 = np.array([2,2,2])[:,np.newaxis]
In [452]:
arr
Out[452]:
In [453]:
arr2
Out[453]:
In [451]:
np.hstack([arr,arr2])
Out[451]:
In [454]:
np.vstack([arr,arr2])
Out[454]:
In [461]:
np.concatenate((arr,arr2),axis=1)
Out[461]:
In [462]:
np.concatenate((arr,arr2),axis=0)
Out[462]:
===============================numpy的array分割===============================
In [480]:
arr = np.arange(12).reshape((3,4))
arr
Out[480]:
In [481]:
np.split(arr,2,axis=1) # 纵向分割 将所有列分为两部分
Out[481]:
In [486]:
arr = np.arange(12).reshape((4,3))
arr
Out[486]:
In [470]:
np.split(arr,2,axis=0) # 横向分割 按所有行分为两部分
Out[470]:
In [471]:
arr = np.arange(12).reshape((3,4))
arr
Out[471]:
In [472]:
np.array_split(arr,3,axis=1) # 不等量分割
Out[472]:
In [473]:
arr = np.arange(15).reshape((3,5))
arr
Out[473]:
In [474]:
np.array_split(arr,3,axis=1) # 不等量分割
Out[474]: