python - 如何从生成集创建矩阵

标签 python matrix sage

我正在尝试使用一些向量的生成集(v1, v2, v3)来形成一个矩阵,其中每个元素代表二进制数据。

我希望代码使用集合中的向量,并使用零向量、每个行向量以及组合 v1+v2v1+v3< 创建一个矩阵v2+v3v1+v2+v3,即。以 01 作为系数的所有可能的线性组合。

我尝试过使用 for 循环,但最终出现重复。我也可以通过执行每个操作来完成此操作,但这对于生成具有许多向量的集合是不可行的。

import numpy as np
A = np.matrix([[1,1,1,1,0,0,0,0],[0,0,1,1,1,1,0,0],[0,0,0,0,1,1,1,1]])

我想创建一个由上述矩阵 A 中行向量的所有可能线性组合组成的新矩阵。

输出应包含以下内容:

[0,0,0,0,0,0,0,0], 
[1,1,1,1,0,0,0,0], 
[0,0,1,1,1,1,0,0], 
[0,0,0,0,1,1,1,1], 
[1,1,0,0,1,1,0,0], 
[0,0,1,1,0,0,1,1],
[1,1,1,1,1,1,1,1], 
[1,1,0,0,0,0,1,1]

最佳答案

我想这就是你想要的。

import numpy as np
from itertools import combinations

v = np.array([[1,1,1,1,0,0,0,0],[0,0,1,1,1,1,0,0],[0,0,0,0,1,1,1,1]]) # v1, v2, v3

l = [] # creating a list of possible combinations [(0, 1), (0, 2), (1, 2), (0, 1, 2)]
for j in range(2, v.shape[0]+1):
    comb = combinations(np.arange(v.shape[0]), j)  
    for i in list(comb): 
        l.append(i)

final = np.zeros((len(l), v.shape[1]))  # creating final matrix 

for i in range(len(l)): # filling final matrix based on combinations
    for j in (l[i]):
        final[i] += v[j]

final = np.concatenate((np.zeros((1,v.shape[1])), v, final%2), axis=0)

#array([[0., 0., 0., 0., 0., 0., 0., 0.],
#       [1., 1., 1., 1., 0., 0., 0., 0.],
#       [0., 0., 1., 1., 1., 1., 0., 0.],
#       [0., 0., 0., 0., 1., 1., 1., 1.],
#       [1., 1., 0., 0., 1., 1., 0., 0.],
#       [1., 1., 1., 1., 1., 1., 1., 1.],
#       [0., 0., 1., 1., 0., 0., 1., 1.],
#       [1., 1., 0., 0., 0., 0., 1., 1.]])

关于python - 如何从生成集创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56654944/

相关文章:

python - 从 pandas DataFrame 中的列中提取 JSON 数据

python - 列中的条件格式单元格基于它在另一列中的对应值

c++ - Eigen :行主要稀疏矩阵的不同行内存预留

r - 将最近邻列表转换为r中的二元邻接矩阵

python - 在 Python 中随机生成特定长度的整数分区的算法?

python - 使用 Python 将复杂参数解析为 shell 脚本

mysql - 根据mysql表中存储的数据创建相似度矩阵

export - 如何在 Sage 中以可导出的方式保存表输出

haskell - 求解(两个以上)线性不等式系统

python - Conda 安装需要永远(作为 SAT 求解器卡住)