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()
。
运算
标量运算
数组和标量之间的运算,默认传递给数组中的每个元素。
数组运算
数组之间的运算,对于同尺寸的数组,采用对应元素进行运算得到结果;否则采用广播机制。
需要注意的是,关键字
and
和or
对数组运算没有用,需要使用&
和|
代替。
单目运算
数组自带一个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
还提供了配套的丰富的数组处理函数。