numpy 是否为零_一文读懂 NumPy 及应用

▍▍▍『1』NumPy 简介

前面,我们讲述了 Python 的基础知识等,但关于科学计算的部分较少提及。从这一篇开始,讲述基本科学计算包的使用。

解释性语法所写的数学算法通常远比编译型来得慢,而且 Python 对于矩阵的运算极不友好,没有各种运算函数,也不适合做数值运算。鉴于此,NumPy 闪亮登场。

最早,Jim HugUNin 大神开发了Numeric 和 Numarray,也就是 NumPy 的前身。2005 年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建了 NumPy 包。

NumPy 是 Python 语言的一个扩展程序库,是一个运行速度非常快的数学库,主要用于数组计算。它可以让你在 Python 中使用向量和数学矩阵,以及许多用 C 语言实现的底层函数,你还可以体验到从未在原生 Python 上体验过的运行速度。毫不客气的说,NumPy 是 Python 在科学计算领域取得成功的基石。它的核心功能是一个具有矢量运算和复杂的广播能力的多维数组,该数组由同类型的数据组成。使用 NumPy,我们可以很方便地执行以下操作:

  • 标准数学函数运算;
  • 实用的线性代数,傅里叶变换和随机数生成。

▍▍▍『2』NumPy 安装

可以使用 Python 包安装程序 pip 来安装 NumPy。

pip install numpy

▍▍▍『3』NumPy 使用

♢♢♢ndarray 数据结构

ndarray 是 Numpy 中的数据结构,具有以下特点:

  • 多维度;
  • 同质,即元素类型相同,每个元素在内存中使用相同大小的块;
  • 固定大小,数组大小不会发生改变。

它的维度称为 axes,类似于坐标系几个轴代表几维一样;每个维度上的元素个数称为 rank,类似于线性代数中秩的概念,除此之外,ndarray 对象的一些重要属性如下:

ndarray.ndim # 维数
ndarray.shape # 每个维度的 rank 组成的元组,如二维数组 (m,n)
ndarray.size # 元素总和
ndarray.dtype # 数据类型
ndarray.itemsize # 每个元素占字节数

♢♢♢创建数组

ndarray 通过内置函数创建,主要方法有:

  • np.array():接受 Python 序列,序列而不是多个元素,转换为 ndarray;
import numpy as np
a = np.array([1, 2, 3]) # 一维
b = np.array([[1,2,3],[4,5,6]]) # 二维
  • np.zeros()/np.ones()/np.eye()/np.full()/np.random.random()/np.empty()
a = np.zeros((2,2)) # 2*2 全0数组
b = np.ones((1,2)) # 1*2 全1数组
c = np.eye(2) # 2 阶对角矩阵,对角线为 1
d = np.full((2,2), 7) # 2*2 全常数数组
e = np.random.random((2,2)) # 2*2 随机数数组
g = np.empty((2,3)) # 2*3 未初始化数组
  • np.arange()/np.linspace()/np.logspace()
# 指定开始、终值、步长创建一维数组
a = np.arange(0, 2, 0.3) 
# 指定开始、终值、个数创建一维等差数列数组
b = np.linspace(0, 2, 9)
# 指定开始、终值、个数创建一维等比数列数组
c = np.logspace(0, 2, 9)

♢♢♢访问数组

♢切片

和 Python 列表类似,ndarray 可以使用切片语法。因为数组可以是多维的,所以你得为每个维度指定好切片。

# 创建 3*4 的二维数组
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
# 切片 2*2 二维数组:
# [[2 3]
#  [6 7]]
b = a[:2, 1:3]
# 切片一个元素
c = a[1, 1]

♢布尔索引

选取数组中满足条件的任意元素,返回一维数组。

a = np.array([[1,2], [3, 4], [5, 6]])
b = a[a>2] # [3, 4, 5, 6]

♢where 函数

与布尔索引类似,根据条件返回数组中的元素。

b = a[a>2] # [3, 4, 5, 6]
b = np.where(a>2) # [3, 4, 5, 6]

♢♢♢基本运算

仅仅会赋值、取值和得到一些属性是不能满足你的需求的,有时候你还需要做一些数学运算。基本的数学运算可以用操作符实现:

a + b
a - b
a * b
a / b
a**2 # a 平方
np.sqrt(a) # a 开根号
a < b

这些操作符都是对数组进行逐元素运算,即每一个元素配对进行计算,返回同大小的数组。

NumPy 还提供了一些其他很有用的操作符,用于处理数组。

a.sum()
a.min()
a.max()
a.dot(b) # 矩阵点乘
np.sin(a)
np.exp(a)

更多相关操作可以查看 NumPy 的 Universal functions。

♢♢♢其他相关

这里记录一下可能需要注意和学习的知识,如果感兴趣的话可自行学习,大体上数据分析方面很少用到这方面知识。

♢不拷贝、浅拷贝、深拷贝

简单的赋值不会拷贝任何数组对象和它们的数据,下面例子中 ab 是同一个东西,b 修改 a 也会修改。

a = np.arange(12)
b = a

浅拷贝创建了一个相同数据的新数组对象,下面例子中 ab 不是同一个东西,但数据相同,b 修改 a 也会修改。

a = np.arange(12)
b = a.view()

深拷贝创建一个新数组,b 修改 a 不会修改。

a = np.arange(12)
b = a.copy()

♢广播

ndarray 具有广播功能,即不同形状的数组可以进行运算,广播规则略。

♢线性代数及其他

NumPy 可以做部分线性代数,基本没用过,略。

从零单排09:NumPy​mp.weixin.qq.com
7e22039ce2b28e6e62b2cdb102b07c3b.png

想一起学习数据科学的同学,可以搜索公众号 “data2nb” 关注 “从零单排数据分析”,一步一步的记录自己的学习历程,可供入门迷茫者参考。可以点击下边链接查看公众号。:-D

01ca86bf23fd3b8a0e36583e089dea70.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值