(现在是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 – 计算所有子矩阵有多少个矩阵具有满秩相关推荐

  1. python求矩阵的秩_Python 实现线性代数计算器

    计算逆序数,运用O(N^2)的算法计算 # 逆序数计算 def reversePairs(nums): """ 计算数组的逆序数,输入数组,返回逆序数 "&qu ...

  2. python求零点_python – 计算大序列的过零点的结果不同

    这个问题源于查看 this关于计算 zero crossings数量的问题的答案.提供了几个解决问题的答案,但NumPy appproach在时间上摧毁了其他问题. 问题:为什么NumPy解决方案提供 ...

  3. 详解,python求矩阵的秩,你肯定能看懂

    在 Python 中,可以使用 NumPy 库求矩阵的秩. NumPy 库提供了 numpy.linalg.matrix_rank() 函数,该函数可以计算矩阵的秩. 求矩阵的秩知识点目录 Pytho ...

  4. python求矩阵的秩_Python--线性代数篇

    讲解Python在线性代数中的应用,包括: 一.矩阵创建 先导入Numpy模块,在下文中均采用np代替numpy 1 import numpy as np 矩阵创建有两种方法,一是使用np.mat函数 ...

  5. python求对数_python中取对数

    技术 | Python从零开始系列连载(二十七) 我们接着上一期的Python,继续跟大家分享有关Python中常用的数值计算和正则表达式. 运算符 1)数值运算 +.-.*./ % (求余数) // ...

  6. 用python求兀_python求π

    <像计算机科学家一样思考Python(第2版)>--2.5 操作顺序 本节书摘来自异步社区<像计算机科学家一样思考Python(第2版)>一书中的第2章,第2.5节,作者[美] ...

  7. python求积分_python 求定积分和不定积分示例

    求f(x) = sin(x)/x 的不定积分和负无穷到正无穷的定积分 sin(x)/x 的不定积分是信号函数sig ,负无穷到正无穷的定积分为pi import math import numpy a ...

  8. python求圆面积_python如何求圆的面积

    首先我们要知道圆的面积计算公式:S = πr²,公式中S为所求圆的面积,π为圆周率,r为圆的半径. 示例: # 定义一个方法来计算圆的面积 def findArea(r): PI = 3.142 re ...

  9. python求圆面积_python如何求圆的面积 python求圆的面积方法

    python如何求圆的面积?本篇文章小编给大家分享一下python求圆的面积方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先我们要知道圆的面积计算 ...

  10. python求乘积_Python实现求笛卡尔乘积的方法

    Python实现求笛卡尔乘积的方法 本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供大家参考,具体如下: 在数学中,两个集合X和Y的笛卡尓乘积(Cartesian product),又称 ...

最新文章

  1. [Offer收割]编程练习赛63
  2. ES6--函数的扩展
  3. 滑动窗口——TCP可靠传输的实现[转]
  4. 实验7.3 字符串 7-8 删除重复字符
  5. 金银岛(信息学奥赛一本通-T1225)
  6. 2020年智能物联网设备数量将达204亿,是智能为王还是服务为王?
  7. 你真的了解UIButton、UILabel 吗?
  8. 解决windows update失败,正在还原的问题
  9. 【资源挖掘】免费DEM数据下载
  10. python脚本文件拓展名_python文件后缀
  11. 用户只有一部手机,怎么保护私钥—— mixin如何实现资产安全
  12. tp5 mysql 使用ignore_tp5数据库配置操作
  13. linux man手册更新,linux man手册介绍【manual】
  14. ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP
  15. 汇编篇 :关于地址总线与数据总线的换算
  16. w7网络计算机共享,网络共享设置 win7局域网共享设置最简单教程
  17. 学习并掌握结构化写作方法,提高写作能力 ——结构化写作学习笔记(3)
  18. linux邮件客户端配置文件,在Deepin V20下配置Evolution邮件客户端,添加新邮箱全过程...
  19. Java编写一个公司员工类
  20. apicloud访问mysql_APICloud db组件

热门文章

  1. TypeScript
  2. pysam筛选reads写bam
  3. Python.习题八 文件与与异常(上)
  4. 驳“法律信仰靠什么来生成?”
  5. 10个小窍门,让你轻松准确搜索(转)
  6. 机械制造作业考研题目答案分享——回转体的加工
  7. LeGO-LOAM运行kitti数据集
  8. 算法(一) 两圆公切线
  9. 使用 SHAP库 对模型预测作解释
  10. 深入理解计算机系统bomb实验