Skip to content

NumPy基础

python
import numpy as np

概述

numpy的核心是一个叫做ndarray内置对象。字如其面,它就是一个数组,不过它的行为和一般的数组存在一些差异,这种设计是为了更好的满足数值计算的需求。

一个ndarray是一个通用的多维同类型数据的容器。

  • 多维:数组可以是多维的。ndim属性可以查看维数,而shape属性可以得到每一维的数据长度。
  • 同类型:一个ndarray对象有一个dtype属性,表示这个数组中所有数据的类型。astype方法可以转换数组的数据类型。默认情况下,小数转整数是直接截断。

创建数组

构造函数

python
np.array()

array函数接收任意的序列型对象

其他的方式

python
# 具体参数需要用的时候参见官方文档。
np.zeros()
np.empty()
np.ones()
np.full()
np.arange()
np.asarray()

数组操作

一个特性

默认情况下,ndarray的很多操作(比如索引,切片)得到的结果都是引用类型的。这意味着对结果进行操作会改变原数组。这是由于对于非常大的数据处理(这是经常的,计算科学),我们默认进行拷贝而非引用是不合理的,也不现实。

如果真的是需要拷贝,可以加一个.copy()

运算

标量运算

数组和标量之间的运算,默认传递给数组中的每个元素。

数组运算

数组之间的运算,对于同尺寸的数组,采用对应元素进行运算得到结果;否则采用广播机制

需要注意的是,关键字andor对数组运算没有用,需要使用&|代替。

单目运算

数组自带一个T属性,表示转置。这个属性一般被用于把数组视为矩阵的运算中。转置依然返回引用,对它的值的修改也会改变原数组。

python
arr = np.arange(15).reshape((3, 5))
arr.T[1][1] = 1
arr

"""
output:
array([[ 0,  1,  2,  3,  4],
       [ 5,  1,  7,  8,  9],
       [10, 11, 12, 13, 14]])
"""

索引

numpy数组的索引非常重要且好用。

基础索引

对于多维的选择,在基础的python之上,numpy的索引不仅仅可以用arr[a][b],还可以用arr[a, b]来选中。

布尔索引

索引支持传入一个布尔值数组。数组的长度必须和数组轴索引的长度一致(虽然不一致的时候也不会报错。)。numpy将该维度中bool值为True的数据裁剪出来。

神奇索引

通用函数

除了提供了一个ndarray对象,numpy还提供了配套的丰富的数组处理函数。