Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
# NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。
属性名字 |
属性解释 |
ndarray.shape |
数组维度的元组 |
ndarray.ndim |
数组维数 |
ndarray.size |
数组中的元素数量 |
ndarray.itemsize |
一个数组元素的长度(字节) |
ndarray.dtype |
数组元素的类型 |
# 常用属性如上,接下来,看代码:
import numpy as np
a = np.array([[1.,2.,3.],[3.,4.,3.]],dtype=np.float)
print(a.ndim,a.shape,a.dtype,a.size)
# 创建数组,
import numpy as np
# 创建数组方法一:
a = np.array([i for i in range(50)])
print(a)
# array 还可以将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组
# 创建数组>>>>>>特殊创建
b = np.zeros((3,4))
b1 = np.ones((3,4))
print(b)
print(b1)
# 为了创建数字组成的数组,NumPy提供了一个类似于range 的函数,该函数返回数组而不是列表。
c = np.arange(20).reshape(4,5)
print(c)
# 创建符合高斯分布的随机矩阵
a = np.random.randn(4,5,7)
print(a)
# 符合均匀分布的矩阵
b = np.random.uniform(0,1,(3,4))
print(b)
张量运算
a = np.arange(0,12).reshape(3,4)
print(a**2)
print(a+a)
print(a/2)
print(a<6)
print(a[a<6])
# 叉乘
# =======
>>> A = np.array( [[1,1],
... [0,1]] )
>>> B = np.array( [[2,0],
... [3,4]] )
>>> A * B # elementwise product
array([[2, 0],
[0, 4]])
>>> A @ B # matrix product
array([[5, 4],
[3, 4]])
>>> A.dot(B) # another matrix product
array([[5, 4],
[3, 4]])
聚合函数
a = np.arange(20).reshape(4,5)
# 求均值
print(a.mean())
# 求和
print(a.sum())
# 求指定轴的和
print(a.sum(axis=1))
img = np.random.randn(2,64,64,3)
# 求最大值
print(img.max())
# 求最大值的位置
print(img.argmax())
# 求指定轴上的最大值,最大值位置
print(img.max(axis=3))
print(img.argmax(axis=3))
切片操作
a = np.array([[1, 2, 3, 5], [3, 4, 8, 4], [7, 8, 9, 10]])
print(a.shape)
print(a[1,0])
print(a[1,1::2])
print(a[:,1])
img = np.random.randn(2,3,4,5)
print(img[...,0].shape)
print(img[...,0])
print(img[:,:,:,1])
维度变换
#
a = np.arange(0,12).reshape(3,4)
print(a.shape)
print(a.reshape(12,1).shape)
# 增加维度
a = np.arange(0,12).reshape(3,4)
print(a[:,:,None].shape)
# 拼接 ,插入都是往前插入,往上一个维度拼接
a = np.array([[1, 2, 3], [2, 3, 4]]) # 2*3
b = np.array([[5, 6, 4], [7, 8, 4]]) # 2*3
c = np.stack([a, b], axis=0)
print(c.shape)
print(c)
a = np.array([[1, 2, 3], [2, 3, 4]]) # 2*3
b = np.array([[5, 6, 4]]) # 1*3
c = np.concatenate((a,b),axis=0)
print(c)
# 维度值变换
rgb = np.random.randn((2, 3, 64, 64))
bgr = rgb[:, ::-1, :, :]
索引
# 切片索引
a = np.arange(10)
print(a)
print(a[:-7])
print(a[-1:-7:-1])
print(a[np.array([3,3,-3,8])])
print(a[[3,3,-3,8]])
# 获取索引
a = np.arange(10)+1
print(a)
print(a[a > 6])
print(np.where(a>6))