本学期选修了《机器学习》,每周两次,每次课都有5-10道编程练习,限时很刺激,做点笔记!
numpy中文手册,查着很快很爽:https://www.numpy.org.cn/reference/ 感恩翻译者和网站的维护者们!
目录
1.Numpy常用的
1.0 n维数组(ndarray)
1.0.1 np.array()
import numpy as np
array1_6 = np.array(((1, 6), (2, 7))) # NumPy中的默认数据类型是float_
array2_3 = np.array([[1, 2, 3], [4, 5, 6]], np.int32) # 显示指定数据类型为32bit integer
print(array1_6)
print(type(array1_6))
print(array1_6.shape)
print(array2_3)
print(type(array2_3))
print(array2_3.shape)
ndarray 可以指定的数据类型:
布尔(Booleans):platform?(平台?)
表示该类型可能并非在所有平台上都可用
类型 | 备注 | 字符代码 |
---|---|---|
bool_ | 兼容:Python bool | '?' |
bool8 | 8位 |
整数(Integers):
类型 | 备注 | 字符代码 |
---|---|---|
byte | 兼容:C char | 'b' |
short | 兼容:C短 | 'h' |
intc | 兼容:C int | 'i' |
int_ | 兼容:Python int | 'l' |
longlong | 兼容:C长 | 'q' |
intp | 大到足以适合指针 | 'p' |
int8 | 8位 | |
int16 | 16位 | |
int32 | 32位 | |
int64 | 64位 |
无符号整数(Unsigned integers):
类型 | 备注 | 字符代码 |
---|---|---|
ubyte | compatible:C unsigned char | 'B' |
ushort | 兼容:C unsigned short | 'H' |
uintc | compatible:C unsigned int | 'I' |
uint | 兼容:Python int | 'L' |
ulonglong | 兼容:C长 | 'Q' |
uintp | 大到足以适合指针 | 'P' |
uint8 | 8位 | |
uint16 | 16位 | |
uint32 | 32位 | |
uint64 | 64位 |
浮点数字(Floating-point numbers):
类型 | 备注 | 字符代码 |
---|---|---|
half | 'e' | |
single | 兼容:C浮动 | 'f' |
double | 兼容:C双 | |
float_ | 兼容:Python float | 'd' |
longfloat | 兼容:C长浮 | 'g' |
float16 | 16位 | |
float32 | 32位 | |
float64 | 64位 | |
float96 | 96位,平台? | |
float128 | 128位,平台? |
复杂的浮点数(Complex floating-point numbers):
类型 | 备注 | 字符代码 |
---|---|---|
csingle | 'F' | |
complex_ | 兼容:Python复杂 | 'D' |
clongfloat | 'G' | |
complex64 | 两个32位浮点数 | |
complex128 | 两个64位浮点数 | |
complex192 | 两个96位浮动平台? | |
complex256 | 两个128位浮点数,平台? |
任何Python对象(Any Python object):
类型 | 备注 | 字符代码 |
---|---|---|
object_ | 任何Python对象 | 'O' |
既可以传入tuple,又可以传入list,特别的,当数组为1 * n 时 ,其.shape 为 (n, ) 而不是 (1, n)
import numpy as np
array1_6 = np.array((1, 6))
print(array1_6)
print(type(array1_6))
print(array1_6.shape)
1.0.2 np.ones()
import numpy as np
array1_6 = np.ones((1, 6))
print(array1_6)
print(type(array1_6))
print(array1_6.shape)
可以发现这里传入(1, 6)的效果与np.array() 完全不同,生成了一个1 * 6的数组并将其全部初始化为1,进一步推广到三维:
import numpy as np
array1_6 = np.ones((2, 3, 4))
print(array1_6)
print(type(array1_6))
print(array1_6.shape)
之后要访问(1, 0, 3) 处的元素:
print(array1_6[1][0][3])
1.0.3 np.zeros()
原理同1.0.2 np.ones() ,效果初始化为0,略
1.0.4 np.random()
原理同1.0.2 np.ones() ,效果初始化为随机数,这里比较奇怪的时np.random不能直接用,要再加上一个random
import numpy as np
array1_6 = np.random.random((1, 6))
print(array1_6)
print(type(array1_6))
print(array1_6.shape)
1.0.5 np.arange()
待补充
1.0.6 数组切片
切片的规则很简单,举一个例子:
b = np.array([[i, i+1, i+2, i+3, i+4, i+5] for i in range(6)])
使用上面的代码创建一个 6*6 的二维 ndarray 命名为 b(这里使用了列表推导式:参考博客)
>>> b
array([[ 0, 1, 2, 3, 4, 5],
[ 1, 2, 3, 4, 5, 6],
[ 2, 3, 4, 5, 6, 7],
[ 3, 4, 5, 6, 7, 8],
[ 4, 5, 6, 7, 8, 9],
[ 5, 6, 7, 8, 9, 10]])
然后可以按照以下规则进行切片 (最多 6 个参数可以省略部分参数):
b[row_start: row_end: row_stride, col_start : col_end : col_stride]
其中步长默认为 row_stride = col_stride = 1 (可以省略),例如:
>>> b[1:2, 1:6]
array([[2, 3, 4, 5, 6]])
解释:从下标为 1 的行到下标为 2 的行(不包含下标为 2 的行),从下标为 1 的列到下标为 6 的列(不包含下标为 6 的列)
>>> b[::2, 1:6]
array([[1, 2, 3, 4, 5],
[3, 4, 5, 6, 7],
[5, 6, 7, 8, 9]])
解释:对行按步长2进行访问,列规则依然是1到6(不含6),步长为1
>>> b[::2, 1:6:2]
array([[1, 3, 5],
[3, 5, 7],
[5, 7, 9]])
1.1 矩阵乘法
1.1.1 点乘
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(a*b) # 点乘
1.1.2 矩阵乘法
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.matmul(a, b)) # 矩阵乘法, educoder上无法识别
print(np.dot(a, b)) # 矩阵乘法
1.2 均值
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.mean(a)) # 均值
print(np.mean(b)) # 均值
1.3 数组拼接
1.3.1 竖直方向平铺
np.vstack(): v -> vertical
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.vstack((a, b))) # 竖直方向平铺
1.3.2 水平方向平铺
np.hstack() : h -> horizontal
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.hstack((a, b))) # 水平方向平铺
1.4 方差和协方差
1.4.1 方差 (variance)
import numpy as np
a = np.array([[1, 2, 3],[4, 5, 6]])
print(np.var(a)) # 方差
1.4.2 协方差(covariance)
import numpy as np
a = np.array([[1, 2, 3],[4, 5, 6]])
print(np.cov(a)) # 协方差
协方差在numpy中计算的说明:待补充