首页 > 编程知识 正文

numpy切片与索引,python numpy数组索引

时间:2023-05-04 12:25:57 阅读:277504 作者:1778

科学计算工具Numpy(二)之数组索引切片,numpy随机数及文件生成读取

一个用python实现的科学计算包。包括:
 1.一个强大的N维数组对象Array;
  2、比较成熟的(广播)函数库;
 3、用于整合C/C++和Fortran代码的工具包;
 4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
                                   ——摘自百度百科

  总之,NumPy(Numeric Python)提供了许多高级的数值编程工具,专为进行严格的数字处理而产生。多为很多大型金融公司使用。是学习python数据分析必须要学习的科学计算工具。
  

1. 数组的索引 1.1 基本的索引及切片 #基本的索引和切片#一维数组 类似listar = np.array(['a','b','c','b','d','f','r','h','j'])print(ar[3])print(ar[:3])print(ar[::2]) b['a' 'b' 'c']['a' 'c' 'd' 'r' 'j'] # 二维数组ar = np.arange(16).reshape(4,4)print(ar[2])print(ar[2][2])print(ar[:3])print(ar[3,2]) #第3行的第2列print(ar[:3,:2]) #切片 前3行的前2列 [ 8 9 10 11]10[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]14[[0 1] [4 5] [8 9]] # 三维数组ar = np.arange(12).reshape(3,2,2)print(ar)print('---------')print(ar[2][0][1]) #第三维,第0行,第1列 [[[ 0 1] [ 2 3]] [[ 4 5] [ 6 7]] [[ 8 9] [10 11]]]---------9 1.2 布尔索引及切片 # 布尔索引及切片ar = np.arange(12).reshape(3,4)i = np.array([True,False,True])j = np.array([True,True,False,False])print(ar)print(i)print(j)print(ar[i,:]) # 在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)print(ar[:,j]) # 在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个# 布尔型索引:以布尔型的矩阵去做筛选m = ar > 5print(m) # 这里m是一个判断矩阵print(ar[m]) # 用m判断矩阵去筛选ar数组中>5的元素 → 重点!后面的pandas判断方式原理就来自此处 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]][ True False True][ True True False False][[ 0 1 2 3] [ 8 9 10 11]][[0 1] [4 5] [8 9]][[False False False False] [False False True True] [ True True True True]][ 6 7 8 9 10 11] # 数组索引及切片的值更改、复制ar = np.arange(10)print(ar)ar[5] = 100ar[7:9] = 200print(ar)# 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组ar = np.arange(10)b = ar.copy()b[7:9] = 200print(ar)print(b)# 复制 Numpy随机数

numpy.random包含多种概率分布的随机样本,是数据分析辅助的重点工具之一

#随机数生成sample = np.random.normal(size = (4,4))print(sample) [[-1.65917538 1.93054953 0.05101332 0.03720209] [-1.58787575 0.75759313 -1.58702116 -1.34863132] [ 1.1078331 1.03023237 -2.68317438 0.46450006] [-0.90010072 -1.01347576 -1.01632623 -0.31983803]] # numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点数组 —— 均匀分布a = np.random.rand(5)b = np.random.rand(2,3)print(a,type(a))print(b,type(b))print('--------------')data1 = np.random.rand(1000)data2 = np.random.rand(1000)import matplotlib.pyplot as plt%matplotlib inline#魔法函数,每次运行自动生成图表plt.scatter(data1,data2)plt.scatter(data1,data2) [ 0.1099355 0.68164177 0.67924836 0.33090322 0.18036907] <class 'numpy.ndarray'>[[ 0.06098348 0.40350489 0.93937925] [ 0.56571866 0.79130795 0.42104344]] <class 'numpy.ndarray'>--------------<matplotlib.collections.PathCollection at 0x277ffca50f0>

# numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组 —— 正态分布data3 = np.random.randn(1000)data4 = np.random.randn(1000)plt.scatter(data3,data4) <matplotlib.collections.PathCollection at 0x277ffd56b70>

# numpy.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组# 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low # dtype参数:只能是int类型 print(np.random.randint(2))# low=2:生成1个[0,2)之间随机整数 print(np.random.randint(10))# low=10:生成1个[0,10)之间随机整数 print(np.random.randint(2,10))# low=2,high=10:生成1个[2,6)之间随机整数 print(np.random.randint(5,size = 10))# low=5,size=10:生成10个[0,5)之间随机整数 print(np.random.randint(2,5,size = 10))# low=2,high=6,size=5:生成5个[2,6)之间随机整数print(np.random.randint(2,6,(2,3)))# low=2,high=6,size=(2,3):生成一个2*3整数数组,取值范围:[2,6)随机整数 185[4 4 0 2 3 4 3 0 0 2][2 4 3 4 4 3 3 2 2 3][[4 4 5] [3 5 4]] 3.Numpy文件的生成及读取 3.1 读取/写入数组文件 import osos.chdir('E:\Python')ar = np.random.randint(0,10,(2,5)) #取值范围要完整,否则报错。print(ar)np.save('Numpytest.npy',ar) [[0 4 3 1 2] [3 4 0 5 3]]finished!!! # 读取数组数据 .npy文件ar_load = np.load('Numpytest.npy')print(ar_load) [[0 4 3 1 2] [3 4 0 5 3]] 3.2 存储/读取文本文件 # 存储/读取文本文件ar = np.random.rand(5,5)np.savetxt('array.txt',ar, delimiter=',',fmt = '%.2f')# np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='n', header='', footer='', comments='# '):存储为文本txt文件ar_loadtxt = np.loadtxt('array.txt', delimiter=',')print(ar_loadtxt,ar_loadtxt.dtype)# 也可以直接 np.loadtxt('E:\Python\array.txt') [[ 0.01 0.39 0.31 0.32 0.08] [ 0.3 0.05 0.14 0.75 0.55] [ 0.35 0.83 0.7 0.55 0.56] [ 0.95 0.59 0.97 0.93 0.76] [ 0.56 0.84 0.13 0.15 0.2 ]] float64

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。