引入

作为一个数学建模小白,在解决数学建模问题中,我们经常会遇见成千上万条的数据,在我们掌握利用Python进行数据处理之前,我们经常会对这类问题感到棘手,进而会放弃选择这类问题。

笔者在自己解决这类大数据问题时,由于没有掌握这类方法,也会经常感到头痛无法下手,而传统的教程似乎又太过冗长。所以这就是笔者撰写这类教程的初衷,帮助数学建模小白快速的熟悉并并掌握一定的方法。这个系列的第一部分是讲解数据科学库中的其中一种:NumPy库。


NumPy 是什么?

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。

来源NumPy中文网:NumPy 用户指南 | NumPy 中文


安装NumPy

推荐阅读:Windows下安装numpy_白杨Shayne的博客-CSDN博客_windows安装numpy


那我们现在就开始!

NumPy Ndarray 对象

我们首先要介绍的就是NumPy最核心的对象Ndarray对象,你一定发现了array这个单词,作为学过一定C语言知识的你一定知道这个单词的中文含义是数组。猜的没错!NumPy Ndarray就是一种数组!只不过它要比Python语言自带的数组类型性能更加优异。

那么我们如何操作Ndarray对象?

首先试着在你的代码第一行导入NumPy科学计算库

import numpy as np

我们首先试着创造一维数组,这跟我们平时创建数组几乎没什么差异

import numpy as np 
a = np.array([1,2,3])  

这里我们将调用numpy缩写成np,创建numpy ndarray数组需要调用库中的array方法。

我们将这个数组输出,得到:

[1 2 3]

我们接着试着创建更高维度的二维数组!

输入如下代码:

import numpy as np 
a = np.array([[1,  2],  [3,  4]])  

同样我们将刚刚创建好的对象a输出!得到:

[[1 2]
 [3 4]]

很好!我们已经初步学会了ndarray数组的创建!

属性

实际上,ndarray数组有很多属于自己的属性,就像你自己有你的姓名,住址,性别一样。

ndarray数组的属性如下表所示:

属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.real ndarray元素的实部
ndarray.imag ndarray 元素的虚部
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
ndarray.ndim

ndarray.ndim 用于返回数组的维数,等于秩。

a = np.arange(24)  
print (a.ndim)             # a 现只有一个维度
# 现在调整其大小
b = a.reshape(2,4,3)  # b 现在拥有三个维度
print (b.ndim)

输出结果我们得到

1
3

这代表数组a维度为一维,而数组b的维度为三维

ndarray.shape

shape函数是用来改变数组的形状,如下例子就是使用shape函数将原来为2X3的数组改为了3X2大小的数组。

a = np.array([[1,2,3],[4,5,6]]) 
a.shape =  (3,2)  
print (a)
ndarray.flags

对一个numpy数组返回以下属性:

属性 描述
C_CONTIGUOUS (C) 数据是在一个单一的C风格的连续段中
F_CONTIGUOUS (F) 数据是在一个单一的Fortran风格的连续段中
OWNDATA (O) 数组拥有它所使用的内存或从另一个对象中借用它
WRITEABLE (W) 数据区域可以被写入,将该值设置为 False,则数据为只读
ALIGNED (A) 数据和所有元素都适当地对齐到硬件上
UPDATEIFCOPY (U) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

例子:

import numpy as np 
 
x = np.array([1,2,3,4,5])  
print (x.flags)

返回:

  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False