python如何统计,python的统计函数
我觉得这个教程不是按照传统思维写的。毕竟,实践是最好的学习方法。在这里学习了基本的数据类型后,我跳到Python来计算一个方阵的行列式。题目中提到的自大菱形矩阵是数学中的经典例子之一,但是这个程序也可以计算一般的方阵。
数学知识会自动跳过,不懂请维基。比如冷傲的钻石矩阵是什么?如何用行列展开法计算矩阵的行列式?
骄傲的钻石矩阵的产生
这里,我们给出了一种生成菱形行列式的方法,其中使用了链表(二维数组)的数据结构。
dim=3
#生成给定维度的虚拟矩阵
m=[(j 1)* * I for I in range(dim)]for j in range(dim)]
看到了吗?这不是很简单吗?实际上,这里I是列标签,J是行标签。range(3)生成list:[0,1,2],每个[]使用一个for循环生成对应的(I,j)元素。
[图像上传失败.(图片-a379b 5-1510020402646)I)
因此,上面生成的矩阵是:
[图像上传失败.(图片-b796f5-1510020402646)]
矩阵维数,子矩阵,行列式
对于完整的源代码,为了按行或列计算行列式,我们需要:
SubM函数,输入一个矩阵,以及行列的位置,返回去掉行列的子矩阵。
DetM函数,计算行列式。
其中第一个if使用dimM这种矩阵维数检测功能来判断是否是方阵。然后使用if进行递归调用。中间有几条注释,都是我在写的过程中保留的,方便调试。同样,我也使用了一个sys.exit()来忽略它后面的所有代码。
校准_检测. py
# -*-编码:utf-8 -*-
导入系统
dim=3
#生成给定维度的虚拟矩阵
m=[(j 1)* * I for I in range(dim)]for j in range(dim)]
def printM(M):
对于M中的行:
对于行中的列:
print(col,end= )
打印( \n )
def dimM(M):
dim=[1,len(M[0]),len(M[0])]
对于范围内的I(len(M)):
dim[0]=len(M)
dim[1]=min(dim[1],len(M[i]))
dim[2]=max(dim[2],len(M[i]))
if dim[1]==dim[2]:
返回dim[0:2]
否则:
返回dim
def subM(M,row,col):
#通过移除(row,col)返回M的子矩阵
sM=[rM.copy() for rM in M]
del sM[row]
对于sM中的rM:
del rM[col]
返回[elm for elm in sM if elm!=[] ]
def detM( M):
如果dimM(M)[0]!=dimM(M)[1]或len(dimM(M))!=2:
返回‘请给出一个方阵!’
如果len(M)==1:
返回M[0][0]
否则:
expandM=0
对于范围内的I(len(M)):
# print(矩阵是:\n )
# printM(M)
# print((row,col)=,(i 1,1), \n的子矩阵,(i 1,1),:\ n )
# printM(subM(M,I,0))
expandM=(-1)* *(I)* M[I][0]* detM(subM(M,I,0))
返回扩展dM
#打印(内存(M))
#print(subM(M,1,1))
printM(M)
打印(上述矩阵的确定为:)
print(detM(M))
print(错误检测的测试(必须是方阵):)
打印(detM([[1],[1,2]]))
sys.exit()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。