【发布时间】:2014-07-30 17:24:41
【问题描述】:
问题:我有一个 MxN 矩阵,其中 M>=N。我想在这个矩阵中识别出线性相互依赖的列向量组。
我希望在 numpy 中有一种快速简便的方法。
>>> a = np.random.randn(7, 6)
>>> a[:, 3] = 2*a[:, 0]-a[:, 4]
>>> a[:, 5] = 3*a[:, 1]
我正在寻找一个函数get_column_groups,它将返回
>>> get_column_groups(a)
array([0, 1, 2, 0, 0, 1])
如果它还返回每个组的排名,我猜加分,例如:
>>> groups, group_ranks = get_column_groups(a)
>>> groups
array([0, 1, 2, 0, 0, 1])
>>> group_ranks
[2, 1, 1]
【问题讨论】:
-
我不确定我是否正确理解了这个问题,并且想知道它的定义明确到什么程度,因为我不确定这些组是独一无二的。下面我根据矩阵的Spark给出了答案。
-
也许您的问题比这更具体,可以通过附加信息更好地解决?
-
我的直觉是它是独一无二的,但也许我的直觉并没有推广到更高的维度。用 3 个向量描绘一个 3-d 空间,其中两个向量的“组”位于穿过原点的线上。第三个,孤独的向量不能被构造为 2 组中向量的线性组合,但是 2 组中的任何向量都是另一个向量的倍数。所以我们有 groups==[0, 0, 1] 和 group_ranks = [1, 1]。我无法想象一个向量可能属于多个组的情况,但也许那是因为我无法想象 4-d。
-
也许我的推理只在 M
-
假设 R 是 MxN 矩阵的秩,其中 M>=N。 R
标签: python numpy matrix linear-algebra