python求矩阵的秩_python – 计算所有子矩阵有多少个矩阵具有满秩
(现在是n = m // 2 1的部分解决方案,以及所请求的代码.)
令k:= m // 2 1
这有点等于问:“{-1,1}的m维向量的多少集合没有大小为min(k,n)的线性相关集合?”
对于这些矩阵,我们知道或可以假定:
>每个向量的第一个条目为1(如果不是,则将整数乘以-1).这使计数减少了2 ** m.
>列表中的所有向量是不同的(如果不是,具有两个相同向量的任何子矩阵具有非满秩).这消除了很多.选择(2 ** m,n)个不同向量的矩阵.
>向量列表按字典排序(排名不受排列影响).所以我们真的在考虑一组向量而不是列表.这减少了一个因子的数量! (因为我们需要明确).
有了这个,我们有一个解决方案n = 4,m = 8.只有八个不同的向量与属性的第一个条目是正的.来自8个不同载体的8个不同载体的组合(排序列表)只有一个.
array([[ 1, 1, 1, 1],
[ 1, 1, 1, -1],
[ 1, 1, -1, 1],
[ 1, 1, -1, -1],
[ 1, -1, 1, 1],
[ 1, -1, 1, -1],
[ 1, -1, -1, 1],
[ 1, -1, -1, -1]], dtype=int8)
该列表中的100个大小-4组合具有等级3.因此,具有属性的0个矩阵.
对于更一般的解决方案:
注意,存在具有第一坐标-1的2个(n-1)个矢量,并且选择(2 **(n-1),m)个矩阵进行检查.对于n = 8和m = 8,有128个向量和1.4297027e 12个矩阵.这可能有助于回答,“对于i = 1,…,k,有多少组合排名我?
或者,“什么样的矩阵(具有上述假设)少于满分?我认为答案是正确的,一个充分的条件是,“两列是彼此的倍数”.我有一种感觉,这是真的,我测试了所有4×4,5×5和6×6矩阵(必须拧紧测试)由于第一列被选择为均匀的,并且由于所有均匀矢量是彼此之间,具有除第一列之外的均匀柱的尺寸为k的任何子矩阵的等级都小于k.
这不是一个必要的条件.以下矩阵是单数(第一加四等于第三加二).
array([[ 1, 1, 1, 1, 1],
[ 1, 1, 1, 1, -1],
[ 1, 1, -1, -1, 1],
[ 1, 1, -1, -1, -1],
[ 1, -1, 1, -1, 1]], dtype=int8)
由于只有两个可能的值(-1和1),其中m> 2,k:= m // 2 1,n = k和第一列-1的所有mxn矩阵在每列中具有多数成员(即,最少k个成员是一样的).所以对于n = k,答案是0.
对于n <8,这里是生成向量的代码.
from numpy import unpackbits, arange, uint8, int8
#all distinct n-length vectors from -1,1 with first entry -1
def nvectors(n):
if n > 8:
raise ValueError #is that the right error?
return -1 + 2 * (
#explode binary numbers to arrays of 8 zeroes and ones
unpackbits(arange(2**(n-1),dtype=uint8)) #unpackbits only takes uint
.reshape((-1,8)) #unpackbits flattens, so we need to shape it to 8 bits
[:,-n:] #only take the last n bytes
.view(int8) #need signed
)
矩阵发生器
#generate all length-m matrices that are combinations of distinct n-vectors
def matrix_g(n,m):
return (array(mat) for mat in combinations(nvectors(n),m))
以下是检查长度maxrank的所有子矩阵是否具有满秩的函数.如果有的话小于maxrank,它会停止,而不是检查所有的组合.
rankof = np.linalg.matrix_rank
#all submatrices of at least half size have maxrank
#(we only need to check the maxrank-sized matrices)
def halfrank(matrix,maxrank):
return all(rankof(submatr) == maxrank for submatr in combinations(matrix,maxrank))
生成所有具有全等级的半矩阵的矩阵
def nicematrices(m,n):
maxrank = min(m // 2 1,n)
return(matr for matr in matrix_g(n,m)if halfrank(matr,maxrank))
把它们放在一起:
import numpy as np
from numpy import unpackbits, arange, uint8, int8, array
from itertools import combinations
#all distinct n-length vectors from -1,1 with first entry -1
def nvectors(n):
if n > 8:
raise ValueError #is that the right error?
if n==0:
return array([])
return -1 + 2 * (
#explode binary numbers to arrays of 8 zeroes and ones
unpackbits(arange(2**(n-1),dtype=uint8)) #unpackbits only takes uint
.reshape((-1,8)) #unpackbits flattens, so we need to shape it to 8 bits
[:,-n:] #only take the last n bytes
.view(int8) #need signed
)
#generate all length-m matrices that are combinations of distinct n-vectors
def matrix_g(n,m):
return (array(mat) for mat in combinations(nvectors(n),m))
rankof = np.linalg.matrix_rank
#all submatrices of at least half size have maxrank
#(we only need to check the maxrank-sized matrices)
def halfrank(matrix,maxrank):
return all(rankof(submatr) == maxrank for submatr in combinations(matrix,maxrank))
#generate all matrices that have all half-matrices with full rank
def nicematrices(m,n):
maxrank = min(m//2+1,n)
return (matr for matr in matrix_g(n,m) if halfrank(matr,maxrank))
#returns (number of nice matrices, number of all matrices)
def count_nicematrices(m,n):
from math import factorial
return (len(list(nicematrices(m,n)))*factorial(m)*2**m, 2**(m*n))
for i in range(0,6):
print (i, count_nicematrices(i,i))
count_nicematrices(5,5)对我来说大约需要15秒钟,绝大多数是由matrix_rank函数取代的.
python求矩阵的秩_python – 计算所有子矩阵有多少个矩阵具有满秩相关推荐
- python求矩阵的秩_Python 实现线性代数计算器
计算逆序数,运用O(N^2)的算法计算 # 逆序数计算 def reversePairs(nums): """ 计算数组的逆序数,输入数组,返回逆序数 "&qu ...
- python求零点_python – 计算大序列的过零点的结果不同
这个问题源于查看 this关于计算 zero crossings数量的问题的答案.提供了几个解决问题的答案,但NumPy appproach在时间上摧毁了其他问题. 问题:为什么NumPy解决方案提供 ...
- 详解,python求矩阵的秩,你肯定能看懂
在 Python 中,可以使用 NumPy 库求矩阵的秩. NumPy 库提供了 numpy.linalg.matrix_rank() 函数,该函数可以计算矩阵的秩. 求矩阵的秩知识点目录 Pytho ...
- python求矩阵的秩_Python--线性代数篇
讲解Python在线性代数中的应用,包括: 一.矩阵创建 先导入Numpy模块,在下文中均采用np代替numpy 1 import numpy as np 矩阵创建有两种方法,一是使用np.mat函数 ...
- python求对数_python中取对数
技术 | Python从零开始系列连载(二十七) 我们接着上一期的Python,继续跟大家分享有关Python中常用的数值计算和正则表达式. 运算符 1)数值运算 +.-.*./ % (求余数) // ...
- 用python求兀_python求π
<像计算机科学家一样思考Python(第2版)>--2.5 操作顺序 本节书摘来自异步社区<像计算机科学家一样思考Python(第2版)>一书中的第2章,第2.5节,作者[美] ...
- python求积分_python 求定积分和不定积分示例
求f(x) = sin(x)/x 的不定积分和负无穷到正无穷的定积分 sin(x)/x 的不定积分是信号函数sig ,负无穷到正无穷的定积分为pi import math import numpy a ...
- python求圆面积_python如何求圆的面积
首先我们要知道圆的面积计算公式:S = πr²,公式中S为所求圆的面积,π为圆周率,r为圆的半径. 示例: # 定义一个方法来计算圆的面积 def findArea(r): PI = 3.142 re ...
- python求圆面积_python如何求圆的面积 python求圆的面积方法
python如何求圆的面积?本篇文章小编给大家分享一下python求圆的面积方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先我们要知道圆的面积计算 ...
- python求乘积_Python实现求笛卡尔乘积的方法
Python实现求笛卡尔乘积的方法 本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称 ...
最新文章
- [Offer收割]编程练习赛63
- ES6--函数的扩展
- 滑动窗口——TCP可靠传输的实现[转]
- 实验7.3 字符串 7-8 删除重复字符
- 金银岛(信息学奥赛一本通-T1225)
- 2020年智能物联网设备数量将达204亿,是智能为王还是服务为王?
- 你真的了解UIButton、UILabel 吗?
- 解决windows update失败,正在还原的问题
- 【资源挖掘】免费DEM数据下载
- python脚本文件拓展名_python文件后缀
- 用户只有一部手机,怎么保护私钥—— mixin如何实现资产安全
- tp5 mysql 使用ignore_tp5数据库配置操作
- linux man手册更新,linux man手册介绍【manual】
- ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP
- 汇编篇 :关于地址总线与数据总线的换算
- w7网络计算机共享,网络共享设置 win7局域网共享设置最简单教程
- 学习并掌握结构化写作方法,提高写作能力 ——结构化写作学习笔记(3)
- linux邮件客户端配置文件,在Deepin V20下配置Evolution邮件客户端,添加新邮箱全过程...
- Java编写一个公司员工类
- apicloud访问mysql_APICloud db组件