Numpy是一个第三方库,是数组相关的运算
通过pip安装;pip install numpy
Anaconda python的一个科学计算发行版本,安装后将不必单独安装numpy,下面的库模块也将不必安装Scipu,numpy,pandas,matplotlib,scikit-learn
实例演示
import numpy as np #用列表创建数组 arr = np.array([1,2,3,4])#用普通列表创建数组 arr_2d = np.array([[1,2],[3,4]]) #嵌套列表创建多维数组 arr.ndim #1,数组维度 arr_2d.ndim #2 ,数组维度 arr.shape #(4,) 数组形状 arr_2d.shape #(2,2) 数组形状 arr.dtype #dtype('int32'),数组类元素类型
#数组函数生成数组 arr2 = np.arange(10) #[0,10)区间函数 print(arr2) arr3 = np.linspace(0,4,10) # 0到4之间等分10份 print(arr3) arr4 = np.random.randn(6,4) #正态分布的随机数 print(arr4) arr5 = np.random.randint(1,5,(3,4))#1-5随机选整数,形成3*4的数组 print(arr5)
结果:
[0 1 2 3 4 5 6 7 8 9] [0. 0.44444444 0.88888889 1.33333333 1.77777778 2.22222222 2.66666667 3.11111111 3.55555556 4. ] [[ 0.66212053 -0.09177667 0.1540246 -0.60972427] [-0.29582584 -1.78060509 0.85346138 0.98237782] [ 0.81189452 1.05013452 -1.30248473 1.68647191] [-0.51096937 0.55555892 1.04796969 -0.68796894] [ 1.90261247 0.66688596 -0.83434671 -1.96265811] [-0.55722723 -0.49191761 0.53691393 0.32902115]] [[2 2 4 4] [4 3 1 3] [2 2 4 2]]
#特殊方法数组 zero = np.zeros((3,5)) #数组元素为0的3*5数组 print(zero.dtype,zero) one = np.ones((3,5),dtype="int32") #数组元素为1的3*5数组,dtype指定数组内元素的数据类型 print(one.dtype,one) eye_arr = np.eye(6) #对角线为1的数组 print(eye_arr)
结果:
float64 [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] int32 [[1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]] [[1. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0.] [0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 1.]]
#数组的 索引和切片 arr5 = np.array([[4, 2, 2, 2],[3, 2, 2, 4],[3, 2, 1, 4]]) arr5[0] #array([4, 2, 2, 2]) arr5[0,0] #4 arr5[-1] # array([3, 2, 1, 4]) arr5[-1,-1] #4 arr5[:2,1] #array([2,2])切片,逗号前表示行切片,逗号后表示列切片
#改变数组形状 arr6 = arr5.reshape(4,3)#生成新的数组,要求元素必须相等 print(arr6) arr7 = arr5.reshape(2,6) print(arr7) arr8 = arr7.ravel() #变成1维数组 print(arr8) #矩阵转置 arr11 = arr7.transpose() #行列互换 print(arr11) #矩阵广播:至少有个维度是相同的(标量是个特殊情况) one = one*10 print(one)
结果:
[[4 2 2] [2 3 2] [2 4 3] [2 1 4]] [[4 2 2 2 3 2] [2 4 3 2 1 4]] [4 2 2 2 3 2 2 4 3 2 1 4] [[4 2] [2 4] [2 3] [2 2] [3 1] [2 4]] [[10. 10. 10. 10. 10.] [10. 10. 10. 10. 10.] [10. 10. 10. 10. 10.]]
#常用运算 arr9 = np.ones((2,6)) print(arr9) arr79 = arr7+arr9 print(arr79) arr7_9 = arr7-arr9 print(arr7_9) arr10 = arr7*arr9 print(arr10) #np.dot() #点乘
结果:
[[1. 1. 1. 1. 1. 1.] [1. 1. 1. 1. 1. 1.]] [[5. 3. 3. 3. 4. 3.] [3. 5. 4. 3. 2. 5.]] [[3. 1. 1. 1. 2. 1.] [1. 3. 2. 1. 0. 3.]]
[[4. 2. 2. 2. 3. 2.] [2. 4. 3. 2. 1. 4.]]
print(np.sin(arr10)) #arr10的每个元素求正选 print(np.sqrt(arr10)) #arr10的每个元素求平分根
结果:
[[-0.7568025 0.90929743 0.90929743 0.90929743 0.14112001 0.90929743] [ 0.90929743 -0.7568025 0.14112001 0.90929743 0.84147098 -0.7568025 ]] [[2. 1.41421356 1.41421356 1.41421356 1.73205081 1.41421356] [1.41421356 2. 1.73205081 1.41421356 1. 2. ]]
#数组最大最小 arr10.max() #求最大值 arr10.argmax() #最大值所在索引 arr10.min() #求最小值 arr10.argmin() #最小值所在索引 arr10.sum() #求和