1.数据导入
1.1直接导入数据
(1)数组型:
①直接赋值
创建一个列表,表示数组(一个单纯的数组,不分行列)。
a = [1,2,3]
②通过numpy函数
numpy数组的好处是更便于对数组进行运算,注意数组型与向量型数据的元素之间都由空格隔开,而列表元素间是由逗号隔开的。即下述代码print结果为[1 2 3]
import numpy as np
a = np.array([1, 2, 3])
(2)向量型:
单层[ ]为数组,双层[[ ]]为向量
①行向量:
import numpy as np
a=np.array([[1,2,3]])
'''注意是双层[]'''
import numpy as np
b=np.array([1,2,3]).reshape((1,-1))
'''其含义是行数设置为1,列数由数据决定'''
②列向量:
import numpy as np
a=np.array([[1],[2],[3]])
'''类似矩阵的输入'''
import numpy as np
a=np.array([[1,2,3]]).T
'''注意是双层[],T表示转置'''
import numpy as np
b=np.array([1,2,3]).reshape((-1,1))
'''其含义是列数设置为1,行数由数据决定'''
(3)矩阵型:
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
import numpy as np
a = np.mat([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
'''注意是双层[]'''
(4)数组型与向量型的互相转换
import numpy as np
'''数组[1,2,3]转换为行向量'''
b=np.array([1,2,3]).reshape((1,-1))
'''数组[1,2,3]转换为列向量'''
b=np.array([1,2,3]).reshape((-1,1))
'''行向量vec_row转换为数组'''
b=vec_row.reshape(-1)
'''列向量vec_col转换为数组'''
b=vec_col.reshape(-1)
1.2excel导入数据
xlrd和openpyxl都是Python中用于处理Excel文件的库,选择时需要注意以下区别。
(1)xlrd主要支持Excel 2007之前的版本,即.xls文件,而openpyxl则主要针对Excel 2007及之后的版本,即.xlsx文件。
(2)写入操作:xlrd不支持写入操作,只能用于读取Excel文件。而openpyxl则提供了写入功能,可以修改和保存Excel文件。
(3)读写速度:在读写速度方面,xlrd/xlwt(与xlrd配套使用的写入库)通常比openpyxl更快,特别是在处理大型文件时。这是因为openpyxl在处理大型文件时可能会遇到性能问题。
(4)文件大小限制:xlrd对单个sheet的行数有限制,不超过65535行。而openpyxl则没有这样的限制,可以处理更大的文件。
一般个人习惯选择openpyxl库。如果处理的是.xls文件,可以在弹出的另存为对话框中,保存类型,选择Excel工作簿.xlsx,即将.xls文件转换为.xlsx文件。
import numpy as np
import openpyxl
file = 'F:\数据.xlsx' '''文件存储路径'''
data = openpyxl.load_workbook(file) '''导入文件'''
sheet = data.worksheet[0] '''导入表,第一张表,索引为0'''
'''sheet.max_row : 取最大行数'''
'''选取每行的3-5列的元素分别生成数组'''
'''注意此时的行列索引初始都是从1开始的'''
for row in range(1,sheet.max_row+1):
final = []
for col in range(3,6):
cell_value = sheet.cell(row, col).value
final.append(cell_value)
final_array = np.array(final)
print(final_array)
'''通过np.array将列表数据生成数组,可以对数组进行运算操作'''
此时如果需要对final列表中增添元素,例如增添1元素,必须是final.append(1),之后再进行np.array操作,而不能对final_array进行append操作。
因为append操作只能对list做,不能对array做。numpy数组不支持append操作。
拓展:如果excel中存在用“=表达式”形式赋值的单元格,用openpyxl读取单元格内容会读取该表达式,而非计算结果,此时应该用pandas库的read_excel来读取,这种方法也是最通用的方法。此时行列索引从0开始,因为其使用基于0的索引系统。如果存在行列名,会变成行列标签,数据开始的行/列索引为0.
data = pd.read_excel('数据.xlsx',engine='openpyxl')
'''pandas库行列坐标索引从0开始'''
'''读取单元格数据用data.iloc[row, col],通过索引坐标定位单元格'''
'''最大行数用data.shape[0]来计算,如果是最大列数则是shape[1]'''
max_row = data.shape[0]
for row in range(1,max_row):
final = []
for col in range(3,6):
cell_value = data.iloc[row, col]
final.append(cell_value)
final_array = np.array(final)
print(final_array)
1.3 .npy文件导入数据
import numpy as np
from path import matrix1'''从path.py导入里面存储的matrix1路径'''
data = np.load(matrix1)
2.运算
2.1向量运算
a+b两向量对应位置元素相加
a*3 每个元素都乘以常数3
np.dot(a,b) 向量的点乘(内积)
np.cross(a,b) 向量的叉乘(外积)
np.linalg.norm(a)向量求模
2.2矩阵运算
a+b 两矩阵对应位置元素相加
a*3 每个元素都乘以常数3
a*b 两矩阵对应位置元素相乘
a@b 矩阵的乘法
np.dot(a,b) 矩阵的乘法