Numpy学习指南

数组、向量

基于学习Numpy的探索过程(最后有说明),本文从初学者的视角对Numpy模块进行全面了解,给出学习建议与重要的资料检索,不定期更新。在帮自己梳理之外,希望能够给初学者一些帮助。

Numpy是Python科学计算领域中比较基础的包,对多维矩阵的计算、线性代数计算、傅立叶变换、随机数的生成等有非常好的支持。关于Numpy的学习强烈建议从官方文档和源码开始,必要时Google搜索和Stack Overflow提问,最后的办法是去源码的Issue提问。

特别说明

补充一些常用的经典函数说明

随机数生成

在构造矩阵时,利用随机数生成是常用的方法,在Reference查表可以找到随机数生成的模块函数清单,根据说明选择自己需要的函数。

  • np.random.randint:用来生成指定的整形随机数数组
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    x_arr = np.random.randint(-1,2,10)
    y_arr = np.random.randint(-1,2,10)
    coordinate = np.column_stack((x_arr,y_arr))
    coordinate
    ````

    ### 常用函数
    #### np.where
    针对矩阵做有条件的赋值,非常便捷好用。
    ```` python
    import numpy as np
    a = np.arange(9).reshape(3,3)
    b = np.where(a > 3,1,0)
    b

结果为

1
2
3
array([[0, 0, 0],
[0, 1, 1],
[1, 1, 1]])

np.vectorize

用于对某一个函数向量化,输出另一个向量化的函数。以Python实现质数求和的问题举例,下面定义了一个判断质数的函数,返回值为布尔型。

1
2
3
4
5
6
def is_prime(x):
for i in range(2,x):
if x%i == 0:
return False
else:
return True

利用np.vectorize对is_prime进行向量化。

1
np.vectorize(is_prime)

得到的是一个基于函数的向量化函数。

1
<numpy.lib.function_base.vectorize at 0x108f71c50>

给得到的函数赋一个数组,得到布尔型的数组。

1
2
3
x = np.vectorize(is_prime)
arr = np.arange(2,10)
x(arr)

结果如下:

1
array([ True,  True, False,  True, False,  True, False, False], dtype=bool)

官方文档

Quickstart tutorial深入浅出,给出了学习的重要逻辑:

  • 了解数组ndarray本身的属性:ndarray.ndim、ndarray.shape、ndarray.size、ndarray.dtype、ndarray.itemsize、ndarray.data。
  • 学会构造数组,这是很基础的一个步骤,在后续的学习实验中根据需要设置实验环境的基础。常用的方法有:array,arrange, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, numpy.random.rand, numpy.random.randn, fromfunction, fromfile。
  • 输出数组,方法简单,但是可以根据需要调整不同的参数。
  • 后续的更多操作,参见下表,给出了Tutorial的目录翻译逻辑。
英文一级目录 二级目录 中文说明 备注
The Basics 基础知识
An example 基本案例
Array Creation 数组创建
Printing Arrays 数组输出
Basic Operations 基础操作
Universal Functions 通用函数
Indexing, Slicing and Iterating
Shape Manipulation
Changing the shape of an array 改变数组的形状
Stacking together different arrays 数组的组合
Splitting one array into several smaller ones 数组的拆分
Copies and Views
No Copy at All
View or Shallow Copy
Deep Copy 深度复制
Functions and Methods Overview 函数和方法总览
Less Basic
Broadcasting rules 广播规则
Fancy indexing and index tricks
Indexing with Arrays of Indices
Indexing with Boolean Arrays
The ix_() function
Indexing with strings
Linear Algebra 线性代数
Simple Array Operations 简单的数组操作
Tricks and Tips 一些技巧和提示
“Automatic” Reshaping
Vector Stacking
Histograms

案例展示

纯理论的Numpy文档看完后,利用更明确的问题或者题目来引导学习更加有效。

探索过程

  • 2016年9月因为数据科学课的缘故,开始了数据科学之旅。第一次探索Numpy等一系列开源工具包。现在想来,能够误打误撞的坚持下来真是“无知者无畏”。那个时候为了完成课程作业找到了官方文档,并没有系统的阅读。作业算是完成了,心中积累了不少的问题。
  • 2016年11月底,自己决定把数据科学课的内容回炉。没有了外在压力,自己看的非常细致,Quickstart tutorial读完,豁然开朗,新建了这篇博客笔记。
  • 在Matplotlib的探索过程里不断发现新的资源,对于Numpy的学习提供了更明确的思路,加入文档。

声明: 本文转载需标明出处,禁止用于商业目的。

ChangeLog

161201 新建
161203 发布