最近看到同事用sckit-learn的统计n-gram的库省去了好多麻烦,决定从基础开始看sckit-learn,从numpy基础重新开始复习,尽量每天一篇,内容会同步到https://github.com/pangdaxing/sckit-learn-notebook中
narray基础
概念
- axes(轴)-相当于矩阵的维度,轴的总数等于矩阵的秩
- eg: 一个3d点如果表示为[1,2,1],那么他的axis数量是1,axis0的长度是3
- ndarray-是存放array的类,array可以看作是narray的别名
- ps:np.array和python标准库中的array不是一回事,array.array是只有一维的
- ndarray.ndim
- axis的数量,也就是矩阵的秩
- ndarray.shape
- 矩阵每个维度的长度,即ndim中顺序遍历每个axis返回的length
- ndarray.size
- 矩阵元素的总量,相当于ndarray.shape中所有值的乘积
- ndarray.dtype
- 矩阵中每个元素的类型,可选的有numpy.int32, numpy.int16, and numpy.float64,如果不指定,会在初始化的时候根据传入list类型自动转型
- ps:注意如果np.array([1,3])这种会认为是int类型,要进行float相关需要强制指定类型
- ndarray.itemsize
- 矩阵中每个元素所占的字节数,和ndarray.dtype.itemsize是一回事
- float64 has itemsize 8 (=64/8)
- complex32 has itemsize 4 (=32/8).
- ndarray.data
- 存放了具体的矩阵数据的数据buffer,我们用矩阵的index的操作的时候会用到
import numpy as np
a = np.arange(15).reshape(3, 5)
print("a:")
print(a)
print("a.shape:")
print(a.shape)
print("a.dim:")
print(a.ndim)
print("a.type")
print(a.dtype.name)
print("a.itemsize")
print(a.itemsize)
print("a.size")
print(a.size)
print("type(a):")
print(type(a))
数组的创建
- 通过python的tuple或者list来创建
- 通过numpy的各种函数创建
import numpy as np
## 通过python的list创建
a = np.array([2, 3, 4])
print("a:")
print(a)
print("a.type:")
print(a.dtype)
print("a.itemsize:")
print(a.itemsize)
b = np.array([(1.5, 2, 3), (4, 5, 6)])
print("b:")
print(b)
print("b.type:")
print(b.dtype)
print("a.itemsize:")
print(b.itemsize)
c = np.array([[1, 2], [3, 4]], dtype=complex)
print("c:")
print(c)
print("c.type:")
print(c.dtype)
print("c.itemsize:")
print(c.itemsize)
## 通过numpy的函数创建
print("np.zeros(3,4):")
print(np.zeros((3, 4)))
#调用函数的时候同样可以指定dtype
print("np.ones((2,3,5),dtype=np.int64")
print(np.ones((2, 3, 5), dtype=np.int64))
#返回一个没有初始化的矩阵,初始值是任意的
print("np.empty((3,4), dtype=np.int32):")
print(np.empty((3, 4), dtype=np.int32))
#可以用类似range的arange创建list,不同的是返回的是np.narray
print("np.arrage(1,3,0.3):")
print(np.arange(1, 3, 0.3))
#因为arrange采用浮点步长的时候,表示精度会带来误差,返回数组长度无法完全可控,更好的生成序列的方式是用linespace
#注意linespace的最后一个参数是区间数,而arrange是步长
print("np.linespace(0, 2*pi, 100)")
print(np.linspace(