1. ndarray——戴着“面具”的矩阵
ndarray是Numpy的核心,是一个N维数组对象,这里的数组对象指的是通用的同构数据多维容器,因为同构,所以元素类型必须相同。
note: 尽管很多地方称其为数组,但是实际上它就是代码版的矩阵,即戴着“面具”的矩阵。
1.1 属性
(1)shape: 表示ndarray各维度大小的元组
(2)dtype: ndarray元素的数据类型
类型 | 类型代码 |
---|---|
int8、uint8 | i1、u1 |
int16、uint16 | i2、u2 |
int32、uint32 | i4、u4 |
int64、uint64 | i8、u8 |
float16、float32、float64、float128 | f2、f4、f8、f16 |
bool | ? |
object | O |
string_ | S |
unicode_ | U |
note: object表示python对象类型;长度为10的字符串表示为S10
(3)ndim: ndarray的轴数/维数
1.2 方法
方法 | 说明 |
---|---|
astype() | 修改dtype,既可以直接接受dtype显示转换,也可以接受其他的ndarray来隐式地采用其它ndarray的dtype |
copy() | 创建一个副本 |
2. 创建ndarray
Numpy中提供了很多方法来创建一些特殊的矩阵。
函数 | 说明 |
---|---|
array() | 接受一个序列,将其转换为ndarray。矩阵的元素的类型会自动匹配,也可以显示指定 |
asarray() | 将输入转换成ndarray |
arange() | 类似于range(),创建一个一维的ndarray |
ones(shape, dtype=None) | 创建全1矩阵 |
zeros(shape, dtype=None) | 创建全0矩阵 |
empty(shape, dtype=None) | 创建指定shape的随机矩阵 |
eye(row, col=None, dtype=float) | 创建单位矩阵,当row<col时创建的伪单位矩阵 |
identiy(n, dtype=None) | 创建n*n的单位矩阵,这才是货真价实的单位矩阵 |
note: 和ones()/zeros()/empty()是三个需要指定shape的创建方法不同,ones_like()/zeros_like()/empty_like()根据其他矩阵的shape来创建对应矩阵
3. ndarray的运算
大小相同的ndarray之间的运算都会到元素级,大小不相同的ndarray之间的运算就会采用广播的形式
note: ndarray与标量直接进行逻辑运算的时候会生成布尔型数组,这里的逻辑运算符包括=、!=、>、-(取反)、<等,当然也可以通过&、|连接多个运算表达式。
4. 索引和切片
索引作用在ndarray的轴上,且一个索引只作用于一个轴。
Numpy中索引有四种,分别是基本索引、切片索引、布尔型索引和花式索引。本节所有例子都基于arr:
arr = [[1,2,3], [4,5,6], [7,8,9]]
4.1 基本索引和切片索引
基本索引就是整数索引,有两种表示方式,第一种方式独有,在前一个索引的结果上执行后一个索引
arr[index1][index2]... # 在arr[index1]结果上执行[index2]操作
第二种方式和切片索引类似,切片索引参考了Python的序列切片,它的功能比基本索引更强大,也可以用来表示整数索引
arr[index1, index2, ...]arr[slice1, slice2, ...]
以上两种索引都是沿着0轴,1轴,... 依次索引或切片。实际使用时,二者可以混用。举个例子
arr[:2, 2]=[3 6]
4.2 布尔型索引
布尔型索引就是使用布尔型ndarray来索引目标ndarray,比如target_arr[bool_arr],此时布尔型ndarray必须与目标ndarray被索引的轴的轴长相等。很好理解这里不给例子了。
布尔型索引相当于另一种形式的基本索引,所以三者可以混用
import numpy as npname = np.array(['jack','bob','jack'])arr = np.array([[1,2,3],[4,5,6],[7,8,9]])arr[name == 'jack', :2] = [[1 2] [7 8]]
4.3 花式索引
和前面两种索引不同的是,花式索引使用list或者ndarray抽取数据到新ndarray中
arr[[1,2], [1,2]] = [5 9]
note: 前一个[1,2]作用于0轴,抽出[[4,5,6],[7,8,9]],后一个[1,2]作用于1轴,分别抽取5和9出来组成[5,9]
5. 通用函数
通用函数都是元素级的ndarray函数,位于numpy下。按照所需ndarray的数量,分为一元函数和二元函数,使用时通过np.func(arr, ...)来调用
一元函数
函数 | 说明 |
---|---|
abs、fabs | 计算各元素的绝对值,计算非复数值fabs()更快 |
sqrt | 计算各元素的算术平方根 |
square | 计算各元素的平方 |
exp | |
log、log10、log2、log1p | 最后一个1p是(1+x)的简称 |
sign | 1(正数)、0(零)、-1(负数) |
ceil | 计算大于等于各元素的最小整数 |
floor | 计算小于等于各元素的最大整数 |
二元函数
函数 | 说明 |
---|---|
add | |
substract | |
multiply | |
divide、floor_divide | floor_divide只取商 |
power | |
maximum/minimum | |
mod | 取余 |
copysign | 将第二个ndarray的元素的符号赋给第一个ndarray的元素 |
greater、greater_equal、less、less_equal、equal、not_equal | 各种比较运算 |
logical_and、logical_or、logical_xor | 各种逻辑运算 |