Python-Numpy库初体验

import numpy as np

# 创建Ndarray对象,此对象为一个矩阵
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], dtype=int)
# 输出矩阵a
print(a)
# 输出a的类型
print("a对象的类型:", type(a))
# 输出a的维数(秩)
print("维数:", a.ndim)
# 输出a的维度
print("维度:", a.shape)
print("元素总数:", a.size)
print("元素类型:", a.dtype)
print("元素大小:", a.itemsize)

# 创建零矩阵
b = np.zeros((3, 3), int, 'C')
print(b)
# 创建1矩阵
c = np.ones(shape=(3, 3), dtype=np.int, order='C')
print(c)
# 从已有数组(列表,元组,数组等类型)创建数组
d = np.asarray(a=a, dtype=np.float, order='F')
print(d)

# 向量切片
f = np.arange(10)
s = slice(0, 7, 2)
print(f[s])
# 向量索引
g = f[2:7:1]
print(g)
# 矩阵切片
print(a[1:])  # 从第二行开始切片
print(a[:1])  # 在第二行结束切片
# 切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。
print(a[..., 1:])  # 第二列及其剩下元素
print(a[1:, ...])  # 第一行及其以后元素

# NumPy高级索引
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
y = x[[0, 1, 2], [0, 1, 0]]  # 获取矩阵x中(0,0)(1,1)(2,0)处的值
print(y)
# 整数索引
h = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = h[1:3, 1:3]
c = h[1:3, [1, 2]]
d = h[..., 1:]
print(b)
print(c)
print(d)
# 布尔索引
print(a[a > 5])
# 花式索引
print(a[[2, 1, 3]])

# NumPy广播
i = np.array([1, 2, 3])
j = np.array([0, 1, 0])
c = i * j  # 向量对应位置相乘
print(c)
print(a + i)  # a是3*4矩阵,i是1*3向量,二者相加,触发广播机制,等效于把数组 i 在二维上重复 4 次再运算:

# NumPy迭代访问
# 迭代访问a中元素
for i in np.nditer(a):
    print(i, end=",")
print("\n")
for i in np.nditer(a.T):
    print(i, end=",")
print("\n")  # attention:a和a.T遍历出来一样,说明内存中存储顺序一样
# C风格遍历(行序优先)
for i in np.nditer(a, order='C'):
    print(i, end=",")
print("\n")
# C风格遍历(列序优先)
for i in np.nditer(a, order='F'):
    print(i, end=",")
print("\n")
# 修改矩阵元素的值
for i in np.nditer(a, op_flags=['readwrite']):
    i[...] = 2 * i
print(a)

# NumPy矩阵操作
# 1.修改矩阵形状
a = a.reshape(2, 6)
print(a)
# 2.迭代器
for element in a.flat:
    element = int(element / 2)
    print(element)
print(a)  # 注: 迭代器不影响矩阵本身的值
# 3.拷贝数组,对拷贝数组做操作不影响原数组
b = a.flatten
# 4. 展平数组元素
print(a.ravel())
# 5.转置
print(np.transpose(a))
# 6.轴变换
b = np.arange(8).reshape(2, 2, 2)  # 生成2*2*2矩阵,轴0为深度,轴1位宽度,轴2位长度
print(b)
print(np.rollaxis(b, 2, 1))  # 将轴2变换到轴1
# 7.轴交换
print(np.swapaxes(b, 1, 2))
# 8.修改数组维度
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])
# 对 y 广播 x
b = np.broadcast(x, y)
# 它拥有 iterator 属性,基于自身组件的迭代器元组
print('对 y 广播 x:', b)

# 矩阵算数运算
a = np.arange(1, 10, dtype=np.float_).reshape(3, 3)
b = np.array([10, 10, 10])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
# 返回矩阵各个元素的倒数
print(np.reciprocal(a))
# 返回矩阵各个元素的幂
print(np.power(a, 2))

# Numpy统计函数
print(a)
print(np.amin(a, 1))  # 寻找最小纵轴
print(np.amax(a, 0))  # 寻找最大横轴
print(np.ptp(a))  # 寻找最大值和最小值的差
print(np.median(a))  # 寻找矩阵的中位数
print(np.mean(a))  # 矩阵的算数平均值
print(np.average(a, axis=0, weights=[1, 2, 3]))  # 矩阵的加权平均值
# 标准差 std = sqrt(mean((x - x.mean())**2))
print(np.std(a))

# Numpy排序、条件筛选函数
dt = np.dtype([('name', 'S10'), ('age', int), ('height', int), ('weight', int)])
matrix = np.array([('Hu', 22, 167, 74), ('Xian', 23, 170, 75), ('F', 23, 169, 55)], dtype=dt)
np.sort(matrix, order='weight')
print(matrix)

"""***Numpy矩阵库***"""
# 1.矩阵的创建
print(np.ones((3, 3), dtype=int, order='C'))  # 全1阵
print(np.zeros((3, 3), dtype=int))  # 全0阵
print(np.eye(3, 4, 0, dtype=int))  # 0号对角线全为1的阵
print(np.identity(5, dtype=int))  # 单位阵
# 2.矩阵转置
print(matrix.T)
print(np.transpose(matrix))

"""***NumpyLinearAlgebra***"""
# dot	两个数组的点积,即元素对应相乘。
# vdot	两个向量的点积
# inner	两个数组的内积
# matmul	两个数组的矩阵积
# determinant	数组的行列式
# solve	求解线性矩阵方程
# inv	计算矩阵的乘法逆矩阵
# 1.矩阵点乘2*3阶
a = np.array([[1, 2, 3], [4, 5, 6]])  #
b = np.array([[7, 8], [9, 10], [11, 12]])  # 3*2阶
c = np.array([1, 2, 3])
d = np.array([4, 5, 6])
print(np.dot(c, c))  # 向量内积
print(np.dot(a, b))  # 矩阵乘法
print(np.vdot(c, c))  # 向量点乘
# numpy.inner() 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积
print(np.inner(a, a))  # 对于2*3阶数组a,等价于a*a.T
# numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。
# 可理解为升阶广播乘
print(np.matmul(a, c))
# 求解矩阵的行列式
e = np.array([[5, 2, 1], [1, 2, 5], [34, 1, 34]], dtype=int)
print(e)
print("det(e) = ", int(np.linalg.det(e)))
# 求解线性方程组
# x + y + z = 6
# 2y + 5z = -4
# 2x + 5y - z = 27
A = np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]])
B = np.array([6, -4, 27])
print(np.linalg.solve(A, B))  # Numpy求解线性方程组
print(np.linalg.inv(A))  # 求解矩阵的逆
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值