Python数据处理之Numpy

简介: Python数据处理之Numpy

什么是Numpy?

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。


如何安装Numpy?


博主用的Python3编译器,命令行下的安装为   pip3 install numpy

安装时如果遇到各种问题请移步 这里(英文不好可以使用Chrome对网页进行翻译)


Numpy的应用

Numpy的属性

首先我们来介绍几种简单的属性


ndim:维度

shape:行数和列数

size:元素个数


我们用下面这段代码来举例说明几种属性的应用情况

#array的用法下面会讲到

import numpy as np
array = np.array([[1,2,3],[2,3,4]])  #列表转化为矩阵
print(array)
print('维度:',array.ndim)  # 维度
print('行数,列数 :',array.shape)    # 行数和列数
print('元素个数:',array.size)   # 元素个数

输出结果如下

[[1 2 3]

[2 3 4]]

维度: 2

行数,列数 : (2, 3)

元素个数: 6


Numpy的array操作

在上面的一段代码中我们用到了array这个属性,该属性用于创建数组,它的几个属性如下


array:创建数组

dtype:指定数据类型

zeros:创建数据全为0

ones:创建数据全为1

empty:创建数据接近0

arrange:按指定范围创建数据

reshape:改变数据的形状

linspace:创建线段


代码应用

array:创建数组

a = np.array([2,3,4])  # 创键一个一维数组
b = np.array([[2,2,4],[2,3,4]])#创建一个2行3列的数组
print(a)
# 该数组为[2 3 4]

dtype:指定数据类型

a = np.array([2,3,4],dtype=np.int)
print(a.dtype)
# int 64
a = np.array([2,3,4],dtype=np.int32)
print(a.dtype)
# int32
a = np.array([2,3,4],dtype=np.float)
print(a.dtype)
# float64
a = np.array([2,3,4],dtype=np.float32)
print(a.dtype)
# float32

zeros:创建数据全为0

ones:创建数据全为1

empty:创建数据全为空(所创建的数据接近0)

a = np.zeros((3,4)) # 数据全为0,3行4列
a = np.ones((3,4),dtype = np.int)   # 数据为1,3行4列
a = np.empty((3,4)) # 数据为empty,3行4列

arrange:按指定范围创建数据

a = np.arange(10,100,2) # 10-100 的数据,2步长

reshape:改变数据的形状

a = np.arange(12).reshape((3,4))    # 3行4列,0到11

linspace:创建线段型数据

a = np.linspace(1,10,20)    # 开始端1,结束端10,且分割成20个数据,生成线段

Numpy的运算

我们先建立两个一维矩阵

import numpy as np
a=np.array([10,20,30,40])   # array([10, 20, 30, 40])
b=np.arange(4)              # array([0, 1, 2, 3])        上文中提到过的创建方法

不难看出我们建立的两个矩阵都是一行四列的对于一些普通的计算可以试着输入

c=a-b  # array([10, 19, 28, 37])
c=a+b   # array([10, 21, 32, 43])
c=a*b   # array([  0,  20,  60, 120])
c=b**2  # array([0, 1, 4, 9])  **在numpy中表示乘方

如果你想用到一些数学函数,比如三角函数

c=10*np.sin(a)  
# array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])

或者进行一些逻辑判断

print(b<3)  
# array([ True,  True,  True, False], dtype=bool)

此处需要注意,正常情况下我们的判断用到了> < 但是判断是否相等的时候一定要用==而不是=

如果我们想对多维的矩阵进行操作


先对我们的矩阵进行一些修改

a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
# array([[1, 1],
#       [0, 1]])
print(b)
# array([[0, 1],
#       [2, 3]])

我们对矩阵进行乘法运算

c_dot = np.dot(a,b)
# array([[2, 4],
#       [2, 3]]

另一种表示方法

c_dot_2 = a.dot(b)
# array([[2, 4],
#       [2, 3]])

再来说一下对 sum(),min(),max()的使用

import numpy as np
a=np.random.random((2,4))
print(a)
#array[[0.44170864 0.55546057 0.20811773 0.31393565]
#      [0.77267586 0.37477637 0.57271214 0.91471081]]
print(np.sum(a))  #求和      4.154097777084038
print(np.min(a))  #求最小值  0.2081177326626824
print(np.max(a))  #求最大值  0.9147108137831268

如果你需要对行或者列进行查找运算,就需要在上述代码中为 axis 进行赋值。 当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。

对于刚才的例子我们继续查找

print("sum =",np.sum(a,axis=1))#sum = [1.51922259 2.63487519]
print("min =",np.min(a,axis=0))#min = [0.44170864 0.37477637 0.20811773 0.31393565]
print("max =",np.max(a,axis=1))#max = [0.55546057 0.91471081]

在平时的使用过程中,对应元素的索引也是很重要的,从下面的一个脚本开始

import numpy as np
A = np.arange(2,14).reshape((3,4)) 
# array([[ 2, 3, 4, 5]
#        [ 6, 7, 8, 9]
#        [10,11,12,13]])
print(np.argmin(A))    # 0
print(np.argmax(A))    # 11

argmin() 和 argmax() 两个函数分别对应着求矩阵中最小元素和最大元素的索引。


cumsum()函数:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。比如元素9,在cumsum()生成的矩阵中序号为3,即原矩阵中2,3,4三个元素的和。

print(np.cumsum(A)) 
# [2 5 9 14 20 27 35 44 54 65 77 90]

对应的累差运算函数:该函数计算的便是每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。

print(np.diff(A))    
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

nonzero()函数:这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。

print(np.nonzero(A))    
# (array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3]))

同样的,我们可以对所有元素进行仿照列表一样的排序操作,但这里的排序函数仍然仅针对每一行进行从小到大排序操作:

import numpy as np
A = np.arange(14,2, -1).reshape((3,4)) 
# array([[14, 13, 12, 11],
#       [10,  9,  8,  7],
#       [ 6,  5,  4,  3]])
print(np.sort(A))    
# array([[11,12,13,14]
#        [ 7, 8, 9,10]
#        [ 3, 4, 5, 6]])

矩阵的转置

print(np.transpose(A))    
print(A.T)
# array([[14,10, 6]
#        [13, 9, 5]
#        [12, 8, 4]
#        [11, 7, 3]])
# array([[14,10, 6]
#        [13, 9, 5]
#        [12, 8, 4]
#        [11, 7, 3]])

clip函数()

函数的格式是clip(Array,Array_min,Array_max),顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最大值。

print(A)
# array([[14,13,12,11]
#        [10, 9, 8, 7]
#        [ 6, 5, 4, 3]])
print(np.clip(A,5,9))    
# array([[ 9, 9, 9, 9]
#        [ 9, 9, 8, 7]
#        [ 6, 5, 5, 5]])

Numpy索引

在元素列表或者数组中,我们可以用如同a[2]一样的表示方法,同样的,在Numpy中也有相对应的表示方法:

import numpy as np
A = np.arange(3,15)
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print(A[5])    # 8

二位矩阵

A = np.arange(3,15).reshape((3,4))
"""
array([[ 3,  4,  5,  6]
       [ 7,  8,  9, 10]
       [11, 12, 13, 14]])
"""
print(A[2])         
# [11 12 13 14]

实际上这时的A[2]对应的就是矩阵A中第三行(从0开始算第一行)的所有元素。

如果你想要表示具体的单个元素,可以仿照上述的例子:

print(A[1][1])      # 8
print(A[1, 1])      # 8

在Python的 list 中,我们可以利用:对一定范围内的元素进行切片操作,在Numpy中我们依然可以给出相应的方法:

print(A[1, 1:3])    # [8 9]

利用for函数进行打印:

for row in A:
    print(row)
"""    
[ 3,  4,  5, 6]
[ 7,  8,  9, 10]
[11, 12, 13, 14]
"""

如果想进行逐列打印,就需要稍稍变化一下:

for column in A.T:
    print(column)
"""  
[ 3,  7,  11]
[ 4,  8,  12]
[ 5,  9,  13]
[ 6, 10,  14]
"""

迭代输出

import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A.flatten())   
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
for item in A.flat:
    print(item)
# 3
# 4
……
# 14

这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。


Numpy array 合并

对于一个array的合并,我们可以想到按行、按列等多种方式进行合并。首先先看一个例子:

import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B)))    # vertical stack
"""
[[1,1,1]
 [2,2,2]]
"""

vertical stack本身属于一种上下合并,即对括号中的两个整体进行对应操作

左右合并:

D = np.hstack((A,B))       # horizontal stack
print(D)
# [1,1,1,2,2,2]

当你的合并操作需要针对多个矩阵或序列时,借助concatenate函数可能会更好

C = np.concatenate((A,B,B,A),axis=0)
print(C)
"""
array([[1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [2],
       [2],
       [1],
       [1],
       [1]])
"""
D = np.concatenate((A,B,B,A),axis=1)
print(D)
"""
array([[1, 2, 2, 1],
       [1, 2, 2, 1],
       [1, 2, 2, 1]])
"""

axis参数很好的控制了矩阵的纵向或是横向打印,相比较vstack和hstack函数显得更加方便


Numpy array 分割


说完了合并我们自然要讲到如何去分割他们

建立一个3行4列的矩阵

A = np.arange(12).reshape((3, 4))
print(A)
"""
array([[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]])
"""

纵向分割

print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""

横向分割

print(np.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

不等量分割

print(np.array_split(A, 3, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), 
 array([[ 2],
        [ 6],
        [10]]), 
 array([[ 3],
        [ 7],
        [11]])]
"""
相关文章
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
67 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
29天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
40 2
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
36 3
|
1月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
60 5
|
1月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
40 2
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
52 2
|
27天前
|
分布式计算 并行计算 大数据
Python编程中的高效数据处理技巧
Python编程中的高效数据处理技巧
44 0
|
7月前
|
Python
python相关库的安装:pandas,numpy,matplotlib,statsmodels
python相关库的安装:pandas,numpy,matplotlib,statsmodels
203 0
|
Python Windows
python怎么安装第三方库,python国内镜像源,终于找到最全的安装教程啦;如Requests,Scrapy,NumPy,matplotlib,Pygame,Pyglet,Tkinter
python怎么安装第三方库,python国内镜像源,终于找到最全的安装教程啦;如Requests,Scrapy,NumPy,matplotlib,Pygame,Pyglet,Tkinter
1393 0