python数组/向量/矩阵数据导入及运算

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) 矩阵的乘法

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值