Python处理数据方向之Numpy

Numpy是Python的一个科学计算库,提供了多维数组对象ndarray,用于高效处理任意维度的数组。它的前身是Numeric和Numarray。Numpy支持数组的算术和逻辑运算,线性代数,傅立叶变换等,且速度比纯Python更快。安装Numpy可以使用pip。文章还介绍了ndarray的特性和创建方法,以及如何保存和加载数组数据。
摘要由CSDN通过智能技术生成

Numpy

官网:https://numpy.org/

1.Numpy的简介

前世

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

今生

Numpy是一个开源的Python的科学计算库,用于快速处理任意维度的数组。

Numpy支持常见的数组及矩阵的操作,对于同样的计算任务有着比Python更简洁的指令和更高效的算法。

Numpy使用nadarray对象来处理多维数组,该对象是一个快速而灵活的数据容器。

NumPy 操作

使用NumPy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算。

  • 傅立叶变换和用于图形操作的例程。

  • 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

NumPy – MatLab 的替代之一

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。

NumPy 是开源的,这是它的一个额外的优势。

2.为什么学习Numpy

快速,简洁,对于同样的数值计算任务,使用Numpy要不直接编写Python代码更加的便捷;

Numpy中的数组的存储效率和输入输出性能均优于Python中等价的基本数据结构;

Numpy的大部分代码是使用C语言编写的,底层算法在设计上有着优异的性能,使得Numpy更加的高效。
在这里插入图片描述

由图可知,使用Python自带的求和函数耗时0.598,而使用Numpy求和耗时是0.088,可以明显看出ndarray的计算速度还是快很多的。

2. Numpy安装

标准的 Python 发行版不会与 NumPy 模块捆绑在一起。 一个轻量级的替代方法是使用流行的 Python 包安装程序 pip 来安装 NumPy。

pip install numpy

启用 NumPy 的最佳方法是使用特定于您的操作系统的可安装的二进制包。 这些二进制包含完整的 SciPy 技术栈(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Python 核心自带的其它包)

3.Numpy中的ndarray对象

Numpy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标进行集合中元素的索引。ndarray对象是用于存放同类元素的多维数组。

ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

在这里插入图片描述
ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。 基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:

numpy.array 

它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上面的构造器接受以下参数:
序号参数及描述
1.object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。
2.dtype 数组的所需数据类型,可选。
3.copy 可选,默认为true,对象是否被复制。
4.order C(按行)、F(按列)或A(任意,默认)。
5.subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
6.ndimin 指定返回数组的最小维数。
看看下面的例子来更好地理解。
  1. 创建一维数组

    import numpy as np 
    list01 = [1,2,3,4]
    a = np.array([1,2,3])  
    print(a)
    print(type(a))
    输出如下:
    [1, 2, 3]
    
    
    
  2. 创建二维数组

    # 多于一个维度  
    import numpy as np 
    list02 = [[1,2,3,4],[5,6,7,8]]
    a = np.array([[1,  2],  [3,  4]])  
    print(a)
    print(type(a))	
    输出如下:
    [[1, 2] 
    [3, 4]]
    
  3. 最小维度

    # 最小维度  
    import numpy as np 
    a = np.array([1,  2,  3,4,5], ndmin =  2)  
    print(a)
    print(type(a))
    输出如下:
    
    [[1, 2, 3, 4, 5]]
    
  4. 三维数组

    # dtype 参数  
    import numpy as np 
    list03 = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]]]
    a = np.array([1,  2,  3], dtype = complex)  
    print(a)
    print(type(a))
    输出如下:
    
    [ 1.+0.j,  2.+0.j,  3.+0.j]
    
**ndarray ** 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。

参考链接:
TutorialsPoint NumPy 教程
numpy
分析库Numpy简介
Numpy入门(一):Numpy的安装和创建

用arange 创建数组
#一维数组
 

a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
a = np.arange(2,10) #[2 3 4 5 6 7 8 9]
a = np.arange(1,10,2) #[1 3 5 7 9]
a = np.arange(1,10,2,dtype=float)
print(a)

#二维数组
#切记前面的12,必须满足3*4
np01  = np.arange(12).reshape(3, 4)
print(np01)
用random创建数组
# np.random.random()    生成0到1之间的随机数  
#创建一维数组   size生成几个数据,可直接写4
np01= np.random.random(size=4) #[0.13475357 0.8088961  0.52055803 0.49706622]
#创建二维数组  size=(3,4) 3行4列 可用()和[] ,效果一样
np01= np.random.random((3,4))
#创建三维数组  两个三行四列
np01= np.random.random((2,3,4))
print(np01) 
使用logspace创建数组
np.logspace(start,stop,num=50,endpoint=Ture,base=10.0,dtype=None)
参数描述
start序列的起始值
stop序列的终止值 ,如果endpoint=True,则证明数组包含于数列
num生成样本数量,默认是50
endpoint如果为ture则包含stop,否则不包含
base对数log的底数,默认10.0
dtype数据类型
下图为数组常见的数据类型:

在这里插入图片描述

4. 在 array 函数中使用 python 自带的 list ,在多维数组中在 list 中存放多个元祖。

使用 empty, zeros, ones, identity,eye 创建矩阵:
>>> import numpy as np
#使用empty创建2x2矩阵
>>> a = np.empty([2,2])
>>> print a
[[1.92432613e-295 1.92410215e-295]
 [1.92414694e-295 1.92414694e-295]]

identity 为返回一个 N 维单位方阵。

同样的还有 empty_like, ones_like, zeros_like 是复制对方的维数,进行相应的处理。

使用 arange 和 linspace 生成数组:

在 0 到 2 中按步长为 0.3 生成数组:

>>> np.arange( 0, 2, 0.3 )
array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])02 中生成 9 个数:

>>> np.linspace( 0, 2, 9 )
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.  ])
Numpy 中数组的基本属性

在 Numpy 中生成的数组叫做 ndarray , 在 ndarray 中有如下的属性:

ndarray.ndim: 数组维数

程序如下:

  >>> a = np.zeros([3,4])
  >>> a.ndim
  2
  >>> b = np.zeros([3,4,5])
  >>> b.ndim
  3
  >>>

ndarray.shape:数组的结构 几乘几 数组

  >>> print a.shape
  (3, 4)
  >>> print b.shape
  (3, 4, 5)
  >>>

ndarray.size: 数组有几个元素

  >>> print a.size
  12
  >>> print b.size
  60
  >>>
Numpy 中数组的保存

使用 tofile 和 fromfile

import numpy as np

a = np.array([(1,2,3,4),(4,5,2,4)])

print a

a.tofile("filename.bin")

b = np.fromfile("filename.bin",dtype = np.int32)

print b.reshape(2,4)
还可以使用 np.save() np.load() 和 np.savez() 这一组合进行数据的存储。
import numpy as np

a = np.array([(1,2,3,4),(4,5,2,4)])

print a

np.save("a.npy", a)
c = np.load("a.npy")
print c
另外一组为 savetxt() 和 loadtxt()
import numpy as np

a = np.array([(1,2,3,4),(4,5,2,4)])

print a
np.savetxt("a.txt", a)
np.loadtxt("a.txt")
c = np.load("a.npy")
print c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦笑&&life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值