numpy 关键数据结构 ndarray

numpy官方教程:https://www.numpy.org/devdocs/user/quickstart.html

numpy 是几个知名ML库的基础,其中基本上所有 numpy 功能都是围绕 ndarray 设计,ndarray 本质是一个同类型元素多维矩阵 (NumPy’s main object is the homogeneous multidimensional array)

基础属性(basic attribute)

ndarray.ndim #有多少维
ndarray.shape #返回一个元组,代表每一维有多少列
ndarray.size #总共有多少元素
ndarray.dtype #元素的类型
ndarray.itemsize #每个元素的大小
ndarray.data #返回ndarray的实际数据存储对象,返回类型 memoryview

创建(creation)

a=np.arrry([1,2,3])
a=np.array([(1,2,3), (4,5,6)])
a=np.zeros((3,4)) #全是0的矩阵
a=np.empty((3,4)) #未被初始化的矩阵
a=np.random.random((2,3))
a=np.arange([start, ]stop, [step, ]dtype=None) # 这个也是返回的 ndarray, 只不过都是一维的
a=np.array(12).reshape(3,4) # 这两个配合就可创建很多矩阵

基本操作(basic operations)

c=a-b # 矩阵元素一对一减法
a**2  # 每个元素进行平方
10*a  # 数乘
a<35  # 比较每个元素和35大小,返回一个同样大小的 bool 矩阵
a*=3
a+=b
a.sum() # 所有元素和
a.min([axis=0]) # 最小值[第几维度每一行的最小值]
a.max() 
np.exp(a)
np.sqrt(a)
np.add(a,b)

元素索引(indexing)

a=np.arange(10)
a[1], a[1:3] # 一维可以 indexing, iterating, slicing
a=np.arange(12).reshape(3,4)
a[2,3], a[:,2] # 多维可以这样引用元素
a[-1] == a[-1, :] # True
for row in a:
  row # 按照 first axis 进行循环

对形状改变(reshaping)

a=np.arange(12).reshape(3,4) # reshape 只是返回新 ndarray,而不是修改原矩阵
a=a.T # 转置
a.resize((2,6)) # resize 是直接调整原 ndarray
a.resize(2,6) # 这样调用亦可

多个矩阵合并(stacking)与划分(spliting)

# stacking
a=np.arange(6).reshape(2,3)
b=np.ones((2,3), dtype=int)
np.vstack((a,b)) #变成 (4,3) 矩阵,纵向合并
np.hstack((a,b)) #变成 (2,6) 矩阵,横向合并
np.column_stack((a,b)) # 可以将多个一维矩阵合并成一个二维,每一个一维作为一列

#spliting
a=np.ones((2,12), dtype=int)
np.hsplit(a, 3) # 竖直分成三个 (2,4) 矩阵
np.hsplit(a, (3,4)) # 竖直分成 (2,3), (2,1), (2,8) 矩阵,也就是从第3,4列进行划分

拷贝(copying)

未完待续

posted on 2019-05-22 20:55  daghlny  阅读(361)  评论(0编辑  收藏  举报

导航