使用前提要在pycharm中导入Numpy库
import numpy as np from datetime import datetime from random import * def pythonsum(n): a = list(range(n)) # Python3中的range不返回一个数组对象,而是返回一个range对象 b = list(range(n)) c = [] for i in range(len(a)): a[i] = i**2 b[i] = i**3 c.append(a[i]+b[i]) return c print(pythonsum(5)) def numpysum(n): a = np.arange(n)**2 b = np.arange(n)**3 c = a + b return c print(numpysum(5)) size=1000 start = datetime.now() time = numpysum(size) data = datetime.now()-start print("numpy所用的时间是:",data.microseconds) start = datetime.now() time = pythonsum(size) data = datetime.now()-start print("python所用的时间是:",data.microseconds) 输出结果: [0, 2, 12, 36, 80] [ 0 2 12 36 80] numpy所用的时间是: 0 python所用的时间是: 1999 a = np.arange(5) print(a.dtype) # 查看arange数组的类型 print(a.shape) # 查看数组每一维的长度 输出结果: int32 (5,) # 创建多维数组 m = np.array([np.arange(2),np.arange(2)]) # 创建2*2的数组 print(m,m.shape,m.dtype) 输出结果: [[0 1] [0 1]] (2, 2) int32 说明这是一个2*2的数组,数组中每一个元素的类型是int32,32是整形的长度 # 创建特殊数组 print(np.zeros(10)) # 创建全0数组 print(np.zeros((3,6))) # 创建3行6列全0数组 print(np.empty((2,3,2))) # 创建2*3*2的数组,数组里两个子数组,每个子数组三行两列 只分配内存空间 print(np.arange(15)) # 创建长度为15的数组 print(np.eye(3,3)) # 生成对角线是1的3*3的矩阵 输出结果: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [[0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.]] [[[9.40636937e-306 9.37247176e-306] [9.36595299e-306 9.37520965e-306] [9.37599190e-306 9.38238030e-306]] [[9.36699600e-306 9.39750385e-306] [9.37260214e-306 9.45182694e-306] [9.38537893e-306 9.44948018e-306]]] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] # 选取数组中的元素 a = np.array([[1,2],[3,4]]) # 创建一个数组 print(a) print(a[0,0],a[0,1]) # 选取数组元素 输出结果: [[1 2] [3 4]] 1 2 # 数组与标量之间的运算 arr = np.array([[1.,2.,3.],[4.,5.,6.]]) print(arr) print(arr*arr) print(arr-arr) print(1/arr,arr**0.5) 输出结果: [[1. 2. 3.] [4. 5. 6.]] [[ 1. 4. 9.] [16. 25. 36.]] [[0. 0. 0.] [0. 0. 0.]] [[1. 0.5 0.33333333] [0.25 0.2 0.16666667]] [[1. 1.41421356 1.73205081] [2. 2.23606798 2.44948974]] # 数组的索引与切片 a = np.arange(9) print(a[3:7]) # 获取数组中指定位置元素 print(a[:7:2]) # 从0开始到7 以2为不长 print(a[::-1]) # 进行反转 输出结果: [3 4 5 6] [0 2 4 6] [8 7 6 5 4 3 2 1 0] b = np.arange(24).reshape(2,3,4) # 改变数组的维度 print(b) print(b[0,0,0]) print(b[:,0,0]) print(b[0]) print(b[0,1]) # 指定打印行 print(b[0,:,1]) # 指定打印列 输出结果: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 0 [ 0 12] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [4 5 6 7] [1 5 9] # 布尔类型的索引 names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) data = np.random.randn(7,4) print(names) print(data) print(data[names == 'Bob']) # names和data里是对应关系,输出行 print("============================") 输出结果: ['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe'] [[-1.06497531 -0.67700958 0.00801293 -2.53275686] [ 0.18395101 -1.53590547 -0.27898633 -0.61355599] [-0.97534594 -0.00714428 -0.5272347 1.63341211] [ 0.08481862 0.75813306 0.60190216 -0.02815623] [-0.13470018 -0.59937593 -1.22813608 1.26896538] [-2.37586693 0.04865015 -0.03679881 0.37807461] [-0.31245456 1.49157519 0.35272635 -2.01963631]] [[-1.06497531 -0.67700958 0.00801293 -2.53275686] [ 0.08481862 0.75813306 0.60190216 -0.02815623]] ============================ # 花式索引 arr = np.empty((8,4)) for i in range(8): arr[i]=i print(arr) print(arr[[4,3,0,6]]) # 输出下标是4,3,0,6的行 输出结果: [[0. 0. 0. 0.] [1. 1. 1. 1.] [2. 2. 2. 2.] [3. 3. 3. 3.] [4. 4. 4. 4.] [5. 5. 5. 5.] [6. 6. 6. 6.] [7. 7. 7. 7.]] [[4. 4. 4. 4.] [3. 3. 3. 3.] [0. 0. 0. 0.] [6. 6. 6. 6.]] arr = np.arange(32).reshape((8,4)) print(arr) print(arr[[1,2,7],[0,1,3]]) # 输出指定的行列 print(arr.T) # 对矩阵进行转置 输出结果: [[ 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 25 26 27] [28 29 30 31]] [ 4 9 31] [[ 0 4 8 12 16 20 24 28] [ 1 5 9 13 17 21 25 29] [ 2 6 10 14 18 22 26 30] [ 3 7 11 15 19 23 27 31]] # 数组的组合 a = np.arange(9).reshape(3,3) print(a) b=a*2 print(b) print(np.hstack((a,b))) # 水平组合 print(np.vstack((a,b))) # 垂直组合 print(np.dstack((a,b))) # 深度组合 输出结果: [[0 1 2] [3 4 5] [6 7 8]] [[ 0 2 4] [ 6 8 10] [12 14 16]] [[ 0 1 2 0 2 4] [ 3 4 5 6 8 10] [ 6 7 8 12 14 16]] [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 0 2 4] [ 6 8 10] [12 14 16]] [[[ 0 0] [ 1 2] [ 2 4]] [[ 3 6] [ 4 8] [ 5 10]] [[ 6 12] [ 7 14] [ 8 16]]] one = np.arange(2) twice = one*2 print(np.column_stack((one,twice))) # 将数组进行列组合,把每一列组合起来变成新数组的行,相当于二位数组的水平组合 print(np.row_stack((one,twice))) # 将数组进行行组合,把每一列组合起来变成新数组的列,相当于二位数组的垂直组合 输出结果: [[0 0] [1 2]] [[0 1] [0 2]] # 数组的分割 a = np.arange(9).reshape(3,3) print(np.hsplit(a,3)) # 把数组按照列来分割 print(np.vsplit(a,3)) # 把数组按照行来分割 c = np.arange(27).reshape(3,3,3) print(np.dsplit(c,3)) # 对数组进行深度分割 输出结果: [array([[0], [3], [6]]), array([[1], [4], [7]]), array([[2], [5], [8]])] [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])] [array([[[ 0], [ 3], [ 6]], [[ 9],[12], [15]], [[18], [21],[24]]]), array([[[ 1], [ 4],[ 7]],[[10],[13],[16]],[[19],[22],[25]]]), array([[[ 2],[ 5],[ 8]],[[11],[14],[17]],[[20],[23],[26]]])] # 数组的属性 b = np.arange(24).reshape(2,12) print(b.ndim) # 输出数组的维度 print(b.size) # 输出数组的元素个数 print(b.itemsize) # 每个元素占的字节数 print(b.nbytes) # 数组占的整个存储空间 输出结果: 2 24 4 96 # 数组的转换 b = np.array([1.+1.j,3.+2.j]) print(b) print(b.tolist()) # 把数组转化成列表 print(b.tostring()) #把数组转化成字符串 print(np.fromstring('20:42:52',sep=':',dtype=int)) #把数组转化成整形 print(b.astype(int)) # 虚数转化为实数,虚部被丢弃,留下实部 print(b.astype('complex')) # 转化为虚数
输出结果:
[1.+1.j 3.+2.j]
[(1+1j), (3+2j)]
b'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x00@'
[20 42 52]
F:/语言工具/pycharm/PyCharm 2018.2.4/PyCharmWorkspace/test3/Numpy_test1.py:130: ComplexWarning: Casting complex values to real discards the imaginary part
print(b.astype(int)) # 虚数转化为实数,虚部被丢弃,留下实部
[1 3]
[1.+1.j 3.+2.j]