Numpy基础笔记(1)

el/2024/7/17 21:31:15

    Numpy简介

    Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:

    ①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的 多维数组
    ②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
    ③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
    ④
线性代数、随机数生成以及傅里叶变换功能。

    ⑤用于集成由C、C++、Fortran等语言编写的代码的工具。

    创建数组

    创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:

[python]  view plain copy
  1. data1=[6,7.5,8,0,1]    #创建列表  
  2. arr1=np.array(data1)    #转换为数组  
  3. arr1.dtype    #数据类型保存在dtype对象中  
  4. data2=[[1,2,3,4],[5,6,7,8]]    #创建嵌套序列(由等长列表组成的列表)  
  5. arr2=np.array(data2)    #转换为多维数组  
  6. np.zeros(10)    #创建指定长度(10)的全0数组  
  7. np.ones((3,6))    #创建指定长度的(3行6列二维)的全1数组  
  8. range(10)    #创建指定数量的顺序列表(内置函数,默认0开始)  
  9. arange(10)    #创建指定数量的顺序数组  
  10. eye(10)    #创建一个正方的N×N单位矩阵  
  11. arr1=np.array([1,2,3],dtype=np.float64)    #解释为特定数据类型  
     数组和标量之间的运算

[python]  view plain copy
  1. arr=np.array([[1.,2.,3.],[4.,5.,6.]])    #创建二维数组  
  2. arr*arr    #行列号相同的数组元素间运算  
  3. arr-arr  
  4. 1/arr  
  5. arr*0.5  
     基本的索引与切片

[python]  view plain copy
  1. arr=np.arange(10)  
  2. arr[5]    #索引第6个元素  
  3. arr[5:8]    #索引第6到第9个元素作为数组  
  4. arr[5:8]=12    #令第6到第9个元素等于12  
  5. arr_slice=arr[5:8]    #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组  
  6. arr_slice[:]=64    #将数组切片的全部元素改为64  
  7. arr[5:8].copy()    #得到数组切片的一份副本  
  8. arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])  
  9. arr2d[2]    #索引二维数组第3行  
  10. arr2d[0][2]  arr2d[0,2]    #等价索引1行3列元素  
  11. arr2d[:2]    #索引第1行和第2行(不含第3行)  
  12. arr2d[:,:1]    #索引第1列  
  13. arr2d[:-2]    #使用负数索引将从尾部开始选取行  
     数组转置和轴对换
    转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。

[python]  view plain copy
  1. arr=np.arange(15).reshape((3,5))    #生成顺序数组,后整形为3行5列  
  2. arr.T    #转置  
  3. arr=np.random.randn(6,3)    #randn函数生成一些正态分布的随机数组(6行3列)  
  4. np.dot(arr.T,arr)    #利用np.dot计算矩阵内积XTX  
     通用函数:快速的元素级数组函数

    通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。

[python]  view plain copy
  1. arr=np.arange(10)  
  2. np.sqrt(arr)    #计算各元素的平方根(arr**0.5)  
  3. exp  #计算各元素指数ex;  abs  #绝对值;  
  4. np.add(x,y)  #x、y数组中对应元素相加;  subtract #相减;  multiply #相乘;  divide #相除;  
     利用数组进行数据处理

    用数组表达式代替循环的做法,通常称为矢量化
    将条件逻辑表述为数组运算

    Numpy.where函数是三元表达式x if condition else y的矢量化版本

[python]  view plain copy
  1. xarr=np.array([1.1,1.2,1.3,1.4,1.5])    #两个数值数组  
  2. yarr=np.array([2.1,2.2,2.3,2.4,2.5])  
  3. cond=np.array([True,False,True,True,False])    #一个布尔数组  
  4. result=np.where(cond,xarr,yarr)    #三元表达式  
     数学和统计方法
    可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:

[python]  view plain copy
  1. arr=np.random.randn(5,4)  
  2. arr.mean();  np.mean(arr);  arr.sum();  
  3. arr.mean(axis=1)    #计算该轴上的统计值(0为列,1为行)  
     用于布尔型数组的方法
    布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
[python]  view plain copy
  1. arr=randn(100)  
  2. (arr>0).sum()    #正值的数量  
  3. bools.any()    #用于测试数组中是否存在一个或多个True  
  4. bools.all()    #用于测试数组中所有值是否都是True  
     排序
    跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。

[python]  view plain copy
  1. arr=randn(8)  
  2. arr.sort()  
  3. arr=randn(5,3)  
  4. arr.sort(0)  #二维数组按列排序;  arr.sort(1)  #二维数组按行排序;  
     唯一化
[python]  view plain copy
  1. ints=np.array([3,3,3,2,2,1,1,4,4])  
  2. np.unique(names)    #找出数组中的唯一值并返回已排序的结果  
     用于数组的文件输入输出
    Numpy能够读写磁盘上的文本数据或二进制数据。

[python]  view plain copy
  1. arr=np.arange(10)  
  2. np.save(‘some_array’,arr)  #数组以未压缩的原始二进制格式保存在.npy文件中  
  3. np.load(‘some_array’)  #通过np.load读取磁盘上的数组  
  4. np.savez(‘array_archive.npz’,a=arr,b=arr)  #将多个数组以保存在一个压缩文件中  
  5. a=np.arange(0,12,0.5).reshape(4,-1)  
  6. np.savetxt(‘E:\\knakan\\a.txt’,a)  #缺省按照’%.18e’格式保存数据,以空格分隔  
  7. np.loadtxt(‘E:\\kankan\\a.txt’)  
  8. np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”)  #改为保存为整数,以逗号分隔  
  9. np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”)  #读入时也需指定逗号分隔  
     线性代数

[python]  view plain copy
  1. x=np.array([[1.,2.,3.],[4.,5.,6.]])  
  2. y=np.array([[6.,23.],[-1,7],[8,9]])  
  3. x.dot(y)  #矩阵乘法,相当于np.dot(x,y)  

【参考文献】

[1]. 利用python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社






http://www.ngui.cc/el/5557041.html

相关文章

Numpy基础笔记---Array 和matrix(2)

一、关于Numpy Numpy是Python第一个矩阵类型,提供了大量矩阵处理的函数。非正式地来说,它是一个使运算更easy,执行速度更快的库,因为它的内部运算是通过C语言实现的。 numpy包含了两种基本的数据类型:矩阵和数组。在使…

python之pandas的基本使用series和dataframe(1)

一、pandas概述 pandas :pannel data analysis(面板数据分析)。pandas是基于numpy构建的,为时间序列分析提供了很好的支持。pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame。 二、数据结构 …

python之pandas的基本使用(2)

一、排序和排名 排序:sort_index和sort_values函数代码示例:print Series排序 x Series(range(4), index [b, a, c, d]) print x.sort_index() # Series按索引排序a 1 b 0 c 2 d 3print x.sort_values() # Series按值排序 b 0 a 1 c…

matplotlib基础教程(1)

前言:matplotlib是一个python的第三方库,里面的pyplot可以用来作图。下面来学习一下如何使用它的资源。 一、使用前 首先在python中使用任何第三方库时,都必须先将其引入。即: import matplotlib.pyplot as plt 或者&#xff…

深度学习中常见分布-正态分布和伽玛分布

正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。 若随机变量X服从一个数学期望为μ、标准…

tensorflow:批标准化(Bacth Normalization,BN)

批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanishing Gradient Pr…

池化函数(Pooling Function)

1. 池化(Pooling)概念 在神经网络中,池化函数(Pooling Function)一般在卷积函数的下一层。在经过卷积层提取特征之后,得到的特征图代表了 比 像素 更高级的特征,已经可以交给 分类器 进行训练分类了。但是我们 每一组卷积核 都生成 一副…

深度学习(图像处理): A neural algorithm of artistic style算法详解

Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015). 下面这篇发表于CVPR16,内容类似,排版更便于阅读。 Gatys, Leon A., Alexander S. Ecker, and Matthias…

深度学习(图像处理)A Neural Algorithm of Artistic Style 图像风格转换 - keras简化版实现

前言 深度学习是最近比较热的词语。说到深度学习的应用,第一个想到的就是Prisma App的图像风格转换。既然感兴趣就直接开始干,读了论文,一知半解;看了别人的源码,才算大概了解的具体的实现,也惊叹别人的奇思…

统计学习:正则化与交叉验证

1. 正则化 模型选择的经典方法是正则化(regularization)。正规化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化一般是模型复杂度的单调递…