numpy多维数组——数组的创建
1、array函数创建数组对象
- 语法格式:np.array(object, dtype=None, ndmin=0)
import numpy as np #导入模块并命名为 np arr1 = np.array([1,2,3],dtype='float') #创建一维数组,数据类型为float print("一维数组:\n",arr1) arr2 = np.array([[1, 2, 3], [4, 5, 6]])#创建一个二维数组 print("二维数组:\n",arr2)
一维数组: [1. 2. 3.] 二维数组: [[1 2 3] [4 5 6]]
2、通过arange、linspace函数创建等差数组对象
arange函数语法格式:np.arange(start, end, step, dtype = None) 左闭右开区间
linspace函数语法格式:np.linspace(start, end, num, endpoint=True) 闭区间
import numpy as np #导入模块并命名为 np a_arange=np.arange(1,20,5) #在区间[1, 20)生成初始值为1,步长为5的等差数列 print("arange创建数组:\n",a_arange) a_linspace=np.linspace(-1,2,5) #区间[-1,2]生成初始值-1,5个等间距的等差数列 print("linspace创建数组:\n",a_linspace)
arange创建数组: [ 1 6 11 16] linspace创建数组: [-1. -0.25 0.5 1.25 2. ]
3、通过logspace函数创建等比数列数组
- 语法格式:np.logspace(start, end, num, endpoint=True, base=10.0)
# 构造从2的0次方到2的9次方的等比数列,该等比数列长度是10个元素. import numpy as np a_logspace =np.logspace(0,9,10,base=2) print(a_logspace)
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
函数 zeros ones diag eye full
import numpy as np #导入模块并命名为 np a_zeros1 = np.zeros(3,dtype=int) #创建元素值全是0的一维数组,数据类型为int print("由0组成的一维数组:\n",a_zeros1) a_zeros2 = np.zeros([3, 4]) #创建元素值全是0的二维数组 print("由0组成的二维数组:\n",a_zeros2) b_ones1 = np.ones(3) #创建元素值全是1的一维数组 print("由1组成的一维数组:\n",b_ones1) b_ones2 = np.ones([3, 4]) #创建元素值全是1的二维数组 print("由1组成的二维数组:\n",b_ones2) c_diag = np.diag([1,2,3,4]) #创建对角线数组 print("给定对角线二维数组:\n",c_diag) d_eye=np.eye(3) #创建单位数组 print("单位数组:\n",d_eye) e_full=np.full([4,4], 3) #创建值相同的二维数组数组 print("值相同的二维数组数组:\n",e_full)
由0组成的一维数组: [0 0 0] 由0组成的二维数组: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] 由1组成的一维数组: [1. 1. 1.] 由1组成的二维数组: [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] 给定对角线二维数组: [[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]] 单位数组: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 值相同的二维数组数组: [[3 3 3 3] [3 3 3 3] [3 3 3 3] [3 3 3 3]]
numpy多维数组——生成随机数
函数 seed rand randn randint
import numpy as np #导入模块并命名为 np np.random.seed(100) #同一种子产生的一组随机数是相同的 a_randint1=np.random.randint(0, 20, 5) # 生成一维数组, 5个0到20之间的随机整数 print("由随机整数组成的一维数组:\n",a_randint1) a_randint2=np.random.randint(0, 20, (3,4)) # 3行4列二维数组,随机整数都介于[0,20) print("由随机整数组成的二维数组:\n",a_randint2) b_rand=np.random.rand(5) # 5个介于[0,1)的随机数一维数组 print("由随机数组成的一维数组:\n",b_rand) c_randn=np.random.randn(5) # 产生5个标准正态分布随机数组成一维数组 print("产生5个标准正态分布随机数组成一维数组:\n",c_randn)
由随机整数组成的一维数组: [ 8 3 7 15 16] 由随机整数组成的二维数组: [[10 2 2 2] [14 2 17 16] [15 4 11 16]] 由随机数组成的一维数组: [0.56229626 0.00581719 0.30742321 0.95018431 0.12665424] 产生5个标准正态分布随机数组成一维数组: [-0.23198063 -0.51772213 1.43018797 0.94971126 0.65692046]
函数 binomial normal 和不常用函数
import numpy as np #导入numpy模块并命名为 np import matplotlib.pyplot as plt #导入绘图模块并命名为plt mu=1 #数学期望:1 sigma=3 #标准差:3 num=1000000 #个数:1000000 rand_data = np.random.normal(mu, sigma, num) #产生正态分布的随机数 plt.hist(rand_data, 100) #绘制直方图 plt.show() #显示图片
shuffle函数
shuffle函数功能是将序列类型中的元素随机排列,返回打乱后的序列。对多维数组进行打乱排列时,默认是对第一个维度也就是列维度进行随机打乱。
import numpy as np arr1= np.arange(10) print("一维数组原顺序:\n",arr1) np.random.shuffle(arr1) print("一维数组打乱顺序:\n",arr1) np.random.seed(100) arr2=np.arange(1,13).reshape(3,4) print("二维数组原顺序:\n",arr2) np.random.shuffle(arr2) print("二维数组打乱顺序:\n",arr2)
一维数组原顺序: [0 1 2 3 4 5 6 7 8 9] 一维数组打乱顺序: [8 1 4 6 7 2 5 3 0 9] 二维数组原顺序: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 二维数组打乱顺序: [[ 5 6 7 8] [ 9 10 11 12] [ 1 2 3 4]]
numpy多维数组——数组的属性
属性 .ndim .shape .szie .dtype .itemszie
import numpy as np a1 = np.arange(1,13) print("一维数组a1:{}".format(a1)) print("一维数组a1的维度:{}".format(a1.ndim)) print("一维数组a1的形状:{}".format(a1.shape)) print("一维数组a1的元素个数:{}".format(a1.size)) a2= np.array([[1,2,3],[4,5,6]]) print("二维数组a2:\n{}".format(a2)) print("二维数组a2的维度:{}".format(a2.ndim)) print("二维数组a2的形状:{}".format(a2.shape)) print("二维数组a2的元素个数:{}".format(a2.size))
一维数组a1:[ 1 2 3 4 5 6 7 8 9 10 11 12] 一维数组a1的维度:1 一维数组a1的形状:(12,) 一维数组a1的元素个数:12 二维数组a2: [[1 2 3] [4 5 6]] 二维数组a2的维度:2 二维数组a2的形状:(2, 3) 二维数组a2的元素个数:6 Process finished with exit code 0
注意一维形状表示!
numpy多维数组——数组的变换
数组重塑方法 .reshape .flatten
方法 |
说明 |
.reshape(shape) |
不改变数组元素,返回一个shape形状的数组,原数组不变 |
.flatten() |
对数组进行降维,返回折叠后的一维数组,原数组不变 |
import numpy as np a1 = np.arange(1,13) #生成一维数组 print("一维数组a1:\n{}".format(a1)) a2=a1.reshape(3,4) #将原数组重塑成3行4列的新数组 print("reshape重塑数组生成新数组a2:\n{}".format(a2)) a3=a1.reshape(-1,6) #将原数组重塑成x行6列的新数组 print("reshape重塑数组生成新数组a3:\n{}".format(a3)) print("原数组a1不变:{}".format(a1)) a4=a3.flatten() #使用flatten函数把a3中的数据展开成一维数组 print("flatten函数把a3中的数据展开成一维数组a4:\n{}".format(a4))
一维数组a1: [ 1 2 3 4 5 6 7 8 9 10 11 12] reshape重塑数组生成新数组a2: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] reshape重塑数组生成新数组a3: [[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]] 原数组a1不变:[ 1 2 3 4 5 6 7 8 9 10 11 12] flatten函数把a3中的数据展开成一维数组a4: [ 1 2 3 4 5 6 7 8 9 10 11 12] Process finished with exit code 0
数组合并 .hstack() .vstack() .concatenate((),axis=0/1)
数组的合并是指沿着特定的方向把多个数组合并到一起,numpy使用hstack、vstack和concatenate函数用于实现多个数组的合并。
import numpy as np #水平合并(左右合并) 要求两个数组的行数一致 A = np.zeros((2, 3), int) B = np.ones((2, 4), int) print("A=\n", A) print("B=\n", B) print("hstack水平合并:\n", np.hstack((A, B))) # axis =0垂直,1是水平 print("concatenate水平合并:\n", np.concatenate((A, B), axis=1))
A= [[0 0 0] [0 0 0]] B= [[1 1 1 1] [1 1 1 1]] hstack水平合并: [[0 0 0 1 1 1 1] [0 0 0 1 1 1 1]] concatenate水平合并: [[0 0 0 1 1 1 1] [0 0 0 1 1 1 1]]
import numpy as np # 垂直合并(上下合并) 两个数组列数一致 A = np.zeros((2,5), int) B = np.ones((3, 5), int) print("A=\n", A) print("B=\n", B) print("vstack垂直合并\n", np.vstack((A, B))) # axis =0垂直,1是水平 print("concatenate垂直合并\n", np.concatenate((A, B), axis=0))
A= [[0 0 0 0 0] [0 0 0 0 0]] B= [[1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]] vstack垂直合并 [[0 0 0 0 0] [0 0 0 0 0] [1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]] concatenate垂直合并 [[0 0 0 0 0] [0 0 0 0 0] [1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]]
数组分割 .hsplit() .vsplit() .split()
与数组的合并相反,数组的分割是指沿着特定的方向把一个数组分割为多个小数组, numpy使用hsplit 、vsplit 和split 函数用于实现数组的分割。数组拆分后为list类型。
import numpy as np arr=np.arange(12).reshape(3,4) print("原数组:\n",arr) print("水平分割为:\n",np.hsplit(arr,2)) print("垂直分割为:\n",np.vsplit(arr,3)) #axis=1,水平分割,axis=0,垂直分割 arr_split=np.split(arr,2,axis=1) print("使用split水平拆分后的新数组:\n",arr_split) print(type(arr_split))#新数据的数据类型为列表,列表中的元素是分割后的数组 print(type(arr))
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 水平分割为: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] 垂直分割为: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] 使用split水平拆分后的新数组: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] <class 'list'> <class 'numpy.ndarray'> Process finished with exit code 0