定义
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。
是用于处理数值型的数据
优点:
- 快速
- 方便
- 科学计算的基础库
numpy创建数组(矩阵)
import numpy as np
import random
# 使用numpy生成数组,得到 ndarray 的数据类型
# dtype 参数指定数组中数据的类型
a = np.array([0, 1, 2, 3, 4], dtype="int64")
b = np.array(range(5))
c = np.arange(0, 5, 2)
# 调整数据类型
d = b.astype("int64")
# numpy中的小数
e = np.array([random.random() for i in range(10)])
# 设置保留的小数位数(在python中也是用这个函数)
f = np.round(e, 2)
# 输出数组中的数据和数组类型
print(a, type(a))
print(b, type(b))
print(c, type(c))
print(d, type(d))
print(e, type(e))
print(f, type(f))
# 输出数组中存放的数据的类型
print(a.dtype)
print(b.dtype)
print(c.dtype)
print(d.dtype)
print(e.dtype)
print(f.dtype)
输出:
[0 1 2 3 4] <class 'numpy.ndarray'>
[0 1 2 3 4] <class 'numpy.ndarray'>
[0 2 4] <class 'numpy.ndarray'>
[0 1 2 3 4] <class 'numpy.ndarray'>
[0.20662315 0.86705151 0.7718923 0.40514403 0.91964175 0.3056898
0.52026858 0.42492263 0.33122519 0.39091112] <class 'numpy.ndarray'>
[0.21 0.87 0.77 0.41 0.92 0.31 0.52 0.42 0.33 0.39] <class 'numpy.ndarray'>
int64
int32
int32
int64
float64
float64
其中 int32
是numpy提供的类型,还有以下几种
数组的计算
a.shape
:
返回数组的形状,分别为每一维度的值
y = np.array([[[1, 2, 3], [4, 5, 6]], [[11, 22, 33], [44, 55, 66]], [[111, 222, 333], [444, 555, 666]]])
print(y.shape)
(3, 2, 3)
x.reshape()
:
更改数组形状
## 1. 数组升维
x = np.arange(15)
print(x.shape)
y = x.reshape((3, 5))
print(y.shape)
## 输出
(15,)
(3, 5)
## 2. 或者
t1 = np.arange(24).reshape((2, 3, 4))
t1
Out[27]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
## 3. 也可以进行数组降维
y = np.array([[[1, 2, 3], [4, 5, 6]], [[11, 22, 33], [44, 55, 66]], [[111, 222, 333], [444, 555, 666]]])
y.reshape((6, 3))
Out[34]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 11, 22, 33],
[ 44, 55, 66],
[111, 222, 333],
[444, 555, 666]])
y.flatten():
直接将数组展开为一维数组
y.flatten()
Out[50]:
array([ 1, 2, 3, 4, 5, 6, 11, 22, 33, 44, 55, 66, 111,
222, 333, 444, 555, 666])
数组和数字进行计算
数组中的每个数字都进行计算,这是 numpy 中的广播机制
y + 2
# 结果
array([[ 3, 4, 5],
[ 6, 7, 8],
[ 13, 24, 35],
[ 46, 57, 68],
[113, 224, 335],
[446, 557, 668]])
y * 2
array([[ 2, 4, 6],
[ 8, 10, 12],
[ 22, 44, 66],
[ 88, 110, 132],
[ 222, 444, 666],
[ 888, 1110, 1332]])
数组和数组进行计算
如果行列都相同,对应位置的数字进行计算
y2 = np.arange(100, 118)
y2 = y2.reshape((6, 3))
y + y2
array([[101, 103, 105],
[107, 109, 111],
[117, 129, 141],
[153, 165, 177],
[223, 335, 447],
[559, 671, 783]])
或,如果列数相同则每一行进行计算
y
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
y1
array([0, 1, 2, 3, 4, 5])
y - y1
array([[ 0, 0, 0, 0, 0, 0],
[ 6, 6, 6, 6, 6, 6],
[12, 12, 12, 12, 12, 12],
[18, 18, 18, 18, 18, 18]])
或,如果行数相同则每一列进行计算
y
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
y1
array([[0],
[1],
[2],
[3]])
y - y1
array([[ 0, 1, 2, 3, 4, 5],
[ 5, 6, 7, 8, 9, 10],
[10, 11, 12, 13, 14, 15],
[15, 16, 17, 18, 19, 20]])
广播原则
如果两个数组的后缘维度(即从末尾开始算起的维度】的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。