## 2022年8月4日_学习第7章——Numpy包
### 内心os:
刷刷刷地过完了这一章,梦回大一线性代数课☁。
### 附上今天照书运行的代码
```
import numpy as np
# 7.2.1 创建 Numpy 数组
print("7.2.1 创建 Numpy 数组")
Numpy1 = np.array([[10, -8, 10.5], [-4, 6.0, 9.6]])
a = np.array([1, 2, 3])
b = np.array([1, 2, 3], dtype=complex) # dtype 参数。complex是复数的意思
c = np.array([[1, 2], [3, 4]], dtype=complex) # 多维数组
ls = [Numpy1, a, b, c]
for i in ls:
print(i, end='\n\n')
# 7.2.2 Numpy 特殊数组
print("\n7.2.2 Numpy 特殊数组")
print("\n1. zeros 数组")
# 1. zeros 数组
zero1 = np.zeros(6) # 含有 6 个 0 的数组,默认为 float
print(zero1)
zero1
zero2 = np.zeros(6, dtype=int) # 含有 6 个 0 的数组,设置数据类型为 int
print(zero2)
zero2
zero3 = np.zeros((3,3), dtype=int) # 多于一维数组,设置数据类型为 int
print(zero3)
zero3
# 2. ones 数组
print("\n2. ones 数组")
one1 = np.ones(8) # 含有 8 个 1 的数组,默认为 float
print(one1)
one1
one2 = np.ones(8, dtype=int) # 含有 8 个 1 的数组,设置数据类型为 int
print(one2)
one2
one3 = np.ones((4, 3), dtype=int) # 多于一维数组,设置数据类型为 int
print(one3)
one3
# 3. empty 数组
print("\n3. empty 数组")
empty = np.empty((5,3))
print("全空数组,即 empty 数组:\n", empty)
# 7.2.3 Numpy 序列数组
print("\n7.2.3 Numpy 序列数组")
np1 = np.arange(1, 120, 4)
print("利用 arange 函数创建等差序列数组(1, 120, 4):\n", np1)
np2 = np.arange(0, 8, 10)
print("利用 arange 函数创建等差序列数组(0, 8, 10):\n", np2)
# 7.2.4 Numpy 数组索引
print("\n7.2.4 Numpy 数组索引")
np1 = np.array([[8,6,5.2],[3.5,-8,0.59]])
print("显示数组(np1)中所有元素:\n", np1)
print("显示数组(np1)中第1行元素:\n", np1[0])
print("显示数组(np1)中第3列元素:\n", np1[:,2])
print("显示数组(np1)中第1行第2列元素:\n", np1[0][1])
print("显示数组(np1)中第2行第3列元素:\n", np1[1][2])
# 7.2.5 Numpy 数组运算
print("\n7.2.5 Numpy 数组运算")
np1 = np.array([8, 6, 5.2])
np2 = np.array([3.5, -8, 0.59])
print("数组加法运算:\n", np1 + np2)
print("数组减法运算:\n", np1 - np2)
print("数组乘法运算:\n", np1 * np2)
print("数组除法运算:\n", np1 / np2)
print("数组(np1)乘方运算:\n", np1**2)
print("数组点乘运算:\n", np.dot(np1, np2))
print("数组(np1)最大值:\n", np1.max())
print("数组(np2)最小值:\n", np2.min())
print("数组(np1)最大值:\n", np1.max())
print("np2 >= np1 吗?:\n", np2 >= np1)
print("数组(np1)的和:\n", np1.sum())
print("数组(np1)和数组(np2)的和:\n", np1.sum()+np2.sum())
# 7.2.6 Numpy 数组复制
print("\n7.2.6 Numpy 数组复制")
np1 = np.array([8, 6, 5.2])
# np2 = np.array([3.5, -8, 0.59])
np2 = np1
print("浅复制数组(np1)中的数据:\n", np2)
np2[1] = -18.6 # 修改浅复制数组中的数据
print("修改浅复制后数组(np2)中的数据后:\n", np2)
print("原数组(np1)中的数据也被修改了:\n", np1)
print()
np3 = np.zeros(3)
np4 = np3.copy()
print("深复制数组(np3)中的数据:\n", np4)
np4[1] = -18.6 # 修改深复制数组中的数据
print("修改深复制后数组(np4)中的数据后:\n", np4)
print("原数组(np3)中的数据未被修改:\n", np3)
# 7.3 Numpy 的矩阵
print("\n7.3 Numpy 的矩阵")
np1 = np.matrix([[2, 6, 8], [14, 19, 22]])
print("矩阵(np1)的数据内容\n",np1)
np2 = np1.T
print("矩阵(np1)转置后(np2)的数据内容\n",np2)
print("矩阵的乘法(np1×np2):\n",np1*np2)
print("矩阵的点乘(np1·np2):\n",np.dot(np1,np2))
np3 = np1.I
print("矩阵(np1)求逆后(np3)的数据内容\n",np3)
print("矩阵的乘法(np1×np3):\n",np1*np3)
print("矩阵的点乘(np1·np3):\n",np.dot(np1,np3))
# 7.4 Numpy 的线性代数
print("\n7.4 Numpy 的线性代数")
# 7.4.1 两个数组的点积
print("\n7.4.1 两个数组的点积")
a = np.array([[1, 2], [3, 4]])
b = np.array([[11, 12], [13, 14]])
print("矩阵的点积(a·b, dot):\n", np.dot(a, b))
# 7.4.2 两个向量的点积
print("\n7.4.2 两个向量的点积")
print("向量的点积(a·b, vdot):\n", np.vdot(a, b))
# 7.4.3 一维数组的向量内积
print("\n7.4.3 一维数组的向量内积")
a = np.array([1, 2, 3])
b = np.array([0, 1, 0])
print("一维数组的向量内积(a·b, inner):\n", np.inner(a, b))
c = np.array([[1, 2], [3, 4]])
d = np.array([[11, 12], [13, 14]])
print("多维数组的向量内积(c·d, inner):\n", np.inner(c, d))
# 7.4.4 矩阵的行列式
print("\n7.4.4 矩阵的行列式")
a = np.array([[1, 2], [3, 4]])
print("矩阵(a)的行列式(linalg.det()):\n", np.linalg.det(a))
b = np.array([[6, 1, 1], [4, -2, 5], [2, 8, 7]])
print("较大矩阵(b)的数据:\n", b)
print("较大矩阵(b)的行列式(linalg.det()):\n", np.linalg.det(b))
# 7.4.5 矩阵的逆
print("\n7.4.5 矩阵的逆")
x = np.array([[1, 2], [3, 4]])
print("原始矩阵(x):\n", x)
y = np.linalg.inv(x)
print("矩阵(x)的逆:\n", y)
print("原始矩阵(x)与其逆矩阵(x^-1)点乘:\n", np.dot(x, y))
# 7.5 Numpy 的文件操作
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('myfile1', a) # 创建 npt 文件,且保存数据
print("7.5.1 创建二进制文件,并保存数据。")
b = np.load('myfile1.npy') # 读出文件中的内容
if b is not None:
print("成功读取二进制文件,然后显示:\n", b)
else:
print("读取二进制文件失败,需要检查源码。")
c = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6], [7.7, 8.8, 9.9]])
np.savetxt('mytxt1.txt', c) # 创建 txt 文件,且保存数据
print("\n7.5.2 创建 txt 文件,并保存数据。")
d = np.loadtxt('mytxt1.txt') # 读出文件中的内容
if d is not None:
print("成功读取 txt 文件,然后显示:\n", d)
else:
print("读取 txt 文件失败,需要检查源码。")
```
