优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python100天36:集合List到多维数组操作numpy的初探

nanyue 2025-02-21 14:36:13 技术文章 3 ℃

前面我们讲了List集合的一些使用方法与场景


Python100天30:如何理解表格与列表数组list

Python100天31:如何理解数组(list)、二级数组、series

Python100天33:利用list 解决日历行程时间段重叠问题

这些运算是常用且共通性,有人想到了把这些有关联的运算加以提取,做成工具

于是 Numpy出来了 Pandas也应运而生了。


Numpy介绍

NumPy 这个词来源于两个单词 – NumericalPython

一个用python实现的科学计算,包括:

  1. 一个强大的N维数组对象Array
  2. 比较成熟的(广播)函数库;
  3. 用于整合C/C++和Fortran代码的工具包;
  4. 实用的线性代数、傅里叶变换和随机数生成函数。
  5. numpy和稀疏矩阵运算包scipy配合使用更加方便。
  1. 执行数学任务,如:数值积分、微分、内插、外推等。
  2. 计算机中的图像表示为多维数字数组。NumPy 库函数来 处理图像。 镜像图像、按特定角度旋转图像等。
  3. 对矩阵进行各种数值计算。如:矩阵乘法、求逆、换位、加法等。


Pandas 是什么?与 NumPy是什么关系。

Pandas是基于NumPy 的一种工具

解决数据分析任务而创建的。 它是使Python成为强大而高效的数据分析环境的重要因素

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

  1. Time- Series:以时间为索引的Series。
  2. DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
  3. Panel :三维的数组,可以理解为DataFrame的容器。
  4. Panel4D:是像Panel一样的4维数据容器。

从以上Python 集合,NumPy数组到 Pandas是在前者基础上不数据产生的工具。

这三都有一个层层递进的关系,解决不同层面共性问题,简单日常操作。


Numpy强大数组能力的直观感受

想象成这样一个情景,一堆学生站一队 编号从 0 1 2 3 4 5 6 7 8

  1. 需求:如何快速的生成一队8个学生
  2. 变换:将学生变成 4 行2列的风格二维数组
import numpy as np

a = np.arange(8)
print ('原始数组:')
print (a)
print ('\n')

b = a.reshape(4,2)
print ('修改后的数组:')
print (b)


[
          [0 1]
          [2 3]
          [4 5]
          [6 7]
]

以上就是一个将一个一维数组变形为二维数组。即数组中的元素也是数组。


如果我们想反一个二级数组变形为一个一维数组

想象成一个方队 的同学,从多行多列的队伍变成一横条

下面是把一个 2 行 4列的二维数组变成一个一维数组


a = np.arange(8).reshape(2,4)

print ('原数组:')
print (a)
print ('\n')
# 默认按行

print ('展开的数组:')
print (a.flatten())
print ('\n')

print ('以 F 风格顺序展开的数组:')
print (a.flatten(order = 'F'))
  1. a.flatten() 以行的维度首尾连接
  2. a.flatten(order = 'F') 以列为单位首尾相连


如果要把一个二维数组的对换怎么办?

三行四列

[
          [ 0 1 2 3]
          [ 4 5 6 7]
          [ 8 9 10 11]
]

四行三列

[
        [ 0 4 8  ]
        [ 1 5 9  ]
        [ 2 6 10]
        [ 3 7 11]
]


代码如下

import numpy as np

a = np.arange(12).reshape(3,4)

print ('原数组:')
print (a )
print ('\n')

print ('对换数组:')
print (np.transpose(a))


还有很多这样的数据变换操作

这些你所有 想到 的地方numpy,pandas 都给我们封装好了。在某种程度上来说编程也是解决实际问题,而我们创建工具的目的也是解决实际问题。这就是为什么老外在IT领域不断创新的源泉,解决问题提取共性,做成工具不断完善。而国内行业基本上是拿来主义会用即可,确实如此会用就行。这也是我们在IT基础领域一直落后国外的核心原因。

最近发表
标签列表