numpy
的主要数据对象是 ndarray
多维数组,数组中包含相同类型的元素,通常是数值类型,每个元素都有一个索引。使用 numpy
前要导入包。
import numpy as np
类型
numpy
的数组被称为 ndarray
(n维数组对象),它是一个数据容器,可以处理多维数组。
a = np.array([[1, 2, 3], [4, 5, 6]])
type(a) # <class 'numpy.ndarray'>
dtype
属性可以获得元素的数据类型,也可以在创建时指定数据类型。
a.dtype # dtype('int32')
a = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
astype()
可以用于类型转化。
a.astype(np.float64) # array([1., 2., 3., 4., 5.], dtype=float32)
如果把小数转化为浮点数,则小数部分则会被截取。
itemsize
属性可以获得元素的字节大小。
a.itemsize
numpy
常见的数据类型有以下几种。
类型 | 含义 |
---|---|
bool |
布尔类型,1 个字节,值为True 或False |
int |
正数类型,一般为int32 或int64 |
intc |
与C 里的int 相同,一般为int32 或int64 |
intp |
用于索引,一般为int32 或int64 |
int8 |
字节,范围 -128 ~ 127 |
int16 |
整数,范围 -32768 ~ 32767 |
int32 |
整数 |
int64 |
整数 |
unit8 |
无符号整数,范围 0 ~ 255 |
unit16 |
无符号整数 |
unit32 |
无符号整数 |
unit64 |
无符号整数 |
float |
float64 缩写 |
float16 |
半精度浮点,5 位指数,10 位尾数 |
float32 |
单精度浮点,8 位指数,23 位尾数 |
float64 |
双精度浮点,11 位指数,52 位尾数 |
complex |
complex128 缩写 |
complex64 |
复数,由两个 32 位浮点表示。 |
complex128 |
复数,由两个 64 位浮点表示。 |
维度
数据的维度称为轴(axes)。
[1, 2, 3] # 一维数据,一个轴。长度为 3
[[1, 2, 3], [4, 5, 6]] # 二维数据,二个轴。第一个维长度为 2,第二维长度为 3
ndim
属性可以获得数组的维度(轴)。
a = np.array([[1, 2, 3], [4, 5, 6]])
a.ndim # 2
shape
属性不仅可以获得数组的维度,也可以获得每个维度的大小。
a.shape # (2, 3)
size
属性获得数组元素的总个数。
a.size # 6
data
属性可以获得数组的缓冲区。
轴可以用 moveaxis()
方法实现轴的移动。
np.moveaxis(a, 0, 1)
# array([[1, 4],
# [2, 5],
# [3, 6]])
swapaxes()
方法实现轴交换。
np.swapaxes(a, 0, 1)
# array([[1, 4],
# [2, 5],
# [3, 6]])
创建
array()
方法通过列表或元组创建数组,数据类型将自动推导得出,也可以指定类型。该方法会自动地将二维列表转化为二维数组,三维列表转化为三维数组。
a = np.array([1, 2, 3])
a.dtype # dtype('int32')
b = np.array([1.1, 2.2, 3.3])
b.dtype # dtype('float64')
c = np.array([[1, 2], [3, 4]], dtype=complex)
# array([[1.+0.j, 2.+0.j],
# [3.+0.j, 4.+0.j]])
还有一些方法可以创建特殊的数组。zeros()
方法可以创建全 0 的数组。
np.zeros((2, 3))
# array([[0., 0., 0.],
# [0., 0., 0.]])
ones()
方法可以创建一个全为 1 的数组。
np.ones((2, 3))
# array([[1., 1., 1.],
# [1., 1., 1.]])
identity()
方法可以创建一个对角线上全为 1 的数组。
np.identity(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
eye()
方法具有与 identity()
方法相似的功能,它创建一个 k 对角线元素上全为 1 的数组,其余元素全为 0。
np.eye(3)
# array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
np.eye(3, 2)
# array([[1., 0.],
[0., 1.],
[0., 0.]])
np.eye(4, 3, 1)
# array([[0., 1., 0.],
[0., 0., 1.],
[0., 0., 0.],
[0., 0., 0.]])