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月前
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
53 1
|
1月前
|
人工智能 分布式计算 数据处理
有奖评测,基于分布式 Python 计算服务 MaxFrame 进行数据处理
阿里云MaxCompute MaxFrame推出分布式Python计算服务MaxFrame评测活动,助力开发者高效完成大规模数据处理、可视化探索及ML/AI开发。活动时间为2024年12月17日至2025年1月31日,参与者需体验MaxFrame并发布评测文章,有机会赢取精美礼品。
|
3月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
3月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
3月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
69 0
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
3月前
|
分布式计算 并行计算 大数据
Python编程中的高效数据处理技巧
Python编程中的高效数据处理技巧
73 0
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
72 2
|
3月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
114 0
|
3月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
117 3

热门文章

最新文章

推荐镜像

更多