- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 numpy.linalg.matrix_rank()
时遇到了一个奇怪的问题。
我有一个矩阵 A,它具有三列和 >100 行。 A由0和1组成。当我使用 numpy.linalg.matrix_rank(A)
时,我得到了 answer=3
,这是正确的。
但是,当我向 A 添加一个长度相同的新列(A 现在有四个列)并使用 numpy.linalg.matrix_rank(A)
我得到 answer=1
这没有意义。新列中的数字以千为单位。所有数据类型都是 float32。
谁知道问题出在哪里?谢谢!
这是一个随机生成的例子。这是一个40*3的数组A。
数组([[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 1., 0., 1.],
[ 1., 1., 1.]], dtype=float32)
numpy.linalg.matrix_rank(A) 为 3。
现在,我添加了第四列,A 现在是:
array([[ 6.42096562e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.15370996e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.28050068e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.20350176e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.26681055e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.55057520e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.82897266e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.29479727e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.54858457e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.82017109e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.03392627e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.24184062e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.90389688e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.75718145e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.67467109e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.78061758e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.52730410e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.13073359e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.51932471e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.27319297e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.41743359e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.98595469e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.40574414e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.12823730e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.66580273e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 4.53152070e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.84440938e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.13604375e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.59290312e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 8.91415820e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.73751992e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 3.96208867e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 2.06492324e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 1.50155918e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.47758789e+02, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.27601094e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 9.77911621e+03, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 5.01128320e+04, 0.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 7.21259922e+04, 1.00000000e+00, 0.00000000e+00,
1.00000000e+00],
[ 6.10147461e+03, 1.00000000e+00, 1.00000000e+00,
1.00000000e+00]], dtype=float32)
numpy.linalg.matrix_rank(A) 是 2。这可能吗?
最佳答案
“...这毫无意义。”实际上,如果您知道matrix_rank
估计 排名,它确实有意义。 matrix_rank
只是计算 singular values 的数量矩阵的不近似为 0。如果奇异值相对于最大奇异值较小,则将其视为 0。当您添加包含“以千计”的数字的第四列时,您添加了一个大的奇异值。三个原始奇异值与新的大奇异值相比较小,因此它们被视为 0,不计入排名。
这是一个例子。 A
是 0 和 1 的数组。 B
是通过将包含 100000 的列附加到 A
来创建的:
In [217]: np.random.seed(123)
In [218]: A = np.random.randint(0, 2, size=(100, 3)).astype(np.float32)
In [219]: B = np.hstack((A, 100000*np.ones((A.shape[0], 1)))).astype(np.float32)
正如预期的那样,A
的等级为 3:
In [220]: np.linalg.matrix_rank(A)
Out[220]: 3
下面是 A
的奇异值:
In [221]: np.linalg.svd(A)[1]
Out[221]: array([ 9.98757744, 5.41796255, 4.88814735], dtype=float32)
像你的例子一样,B
的排名是 1:
In [222]: np.linalg.matrix_rank(B)
Out[222]: 1
我们可以看到 B
有一个奇异值比其他三个奇异值大得多。幅度上的差异足以使 matrix_rank
认为较小的奇异值近似为 0:
In [223]: np.linalg.svd(B)[1]
Out[223]:
array([ 1.00000000e+06, 5.45980692e+00, 4.90207911e+00,
4.59457588e+00], dtype=float32)
请注意,matrix_rank
考虑了数据类型。如果将B
转换为64位 float ,则matrix_rank
计算出的秩为4:
In [226]: np.linalg.matrix_rank(B.astype(np.float64))
Out[226]: 4
关于python - numpy 矩阵排名不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843515/
我正在查看下面的示例代码, r element frequency and column name 并且想知道除了r中的排名和频率之外,是否有任何方法可以显示每列中每个元素的索引。因此,例如,所需的输
我有下表按 Id、Year DESC 排序 ID 年份有效 1 2011 1 1 2010 1 1 2009 0 1 2002 1 4 2013 1 4 2012 1 4 2011 1 等等。 我想要
鉴于此数据 Type Time Outcome Wanted Result 1 8:00 1 1 1 9:00 1 1 1 10:00 1 1 0
我正在寻找一种对两个句子进行排名/匹配的方法。 例如,取以下2个例句。 这是一个简短的句子。 这是一个包含很多单词的长句子。 我的新句子是这是一个句子。 我想将我的新句子与现有句子进行比较。我的新句子
我是 scikit 新手,我正在按照此处的示例 http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_dat
我有一张 table : r_user | r_points | -------------------- user1 | 12 | user2 | 124 | use
我需要获得顶级玩家、给定玩家的排名以及与该给定玩家排名相关的少数玩家。 为了更清楚地解释,下表是我想要的,它显示了得分最高的 3 名玩家、给定玩家的排名 (id=11) 以及得分略高于和低于该给定玩家
我正在尝试创建一个排名(排名)查询。 我使用表users、schedule 和picks来计算排名。然而,这样做的缺陷是,如果用户未提交任何选择,则该用户将不会出现在排名中。 下面的查询返回所有已提交
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: High score system from my iphone game 我的查询是: $sql = "SELEC
我有一个玩家表和MatchUps表。 MatchUps 表具有一个 winner_id 列和一个 loser_id 列。我可以根据一次查询的胜率获得排名/排名吗?如果我能为每个玩家返回这样的东西,那就
我正在尝试创建一个排名/阶梯系统,其中排名最高的氏族 (1) 应位于顶部,排名为 2 的氏族应位于顶部,依此类推。但我无法让它工作......我尝试了不同的方法: PHP: $sql = mysql_
我需要一份游戏中排名最高的玩家列表。排名是即时计算的,数据取自两个表。我设法以正确的方式对它们进行排序,但是@rank:=0 -> @rank:=@rank+1 技巧,其中一个名为 rank 的附加字
下周末我们将进行一场包含 3 项资格赛(半决赛和决赛)的比赛。只有最好的 15 名参赛者才能参加半决赛。只有最好的 6 人才能参加总决赛。 在资格考试中,每项资格考试的分数从 0 到 100 不等 我
我正在尝试找出对我的产品进行加权的最佳方式,以及它们应该以何种顺序出现在主页等地方。 我想处理四个指标并将其转化为排名: 购买产品 产品有多久了(以天为单位) 产品被保存了多少次 产品被浏览了多少次
使用 @N=@N + 1 的经典技巧来获取某些有序列上的项目排名。现在在订购之前,我需要通过将它与其他表内部连接来从基表中过滤掉一些值。所以查询看起来像这样 -: SET @N=0; SELECT
我需要一些帮助来处理在 MySQL 中排名时的关系。例如: 播放器 |积分 玛丽:90 鲍勃:90 吉姆:65 凯文:12 Bob 和 Mary 应该都排名第一。吉姆应该是#3。凯文应该是#4。 My
我正在寻找一种算法,该算法可以为我提供具有特定强度的下一个排列。长度为 n 的排列由元素 (1,2,3,...n) 定义 排列的强度是多少? 长度为 10 的排列的强度定义为 |a1-a2|+|a2-
我正在编写一个具有信誉组件的电子商务引擎。我希望用户能够对项目进行评论和评分,并能够对评论进行评分。 用于根据“最佳”评论对项目进行排序的最佳算法是什么?它必须根据给出最佳评论的人获得的质量评论数量进
我有一个按游戏结果填满游戏的数据库表,想知道我是否可以计算以下内容: GP(玩过的游戏) 获胜 失败 积分(每胜2分,每负1分) 这是我的表结构: CREATE TABLE `results` (
我有一个 users 表,其中有一列名为 money_sent。我想按 money_sent 降序排列此表,然后找出特定用户的“排名”。 例如,只有 111 人比用户 12392 花费更多的钱,因此他
我是一名优秀的程序员,十分优秀!