将矩阵(列表列表)转换为python中的方阵

时间:2014-10-15 13:18:50

标签: python list matrix

我想通过在必要时插入零来将给定矩阵a,b转换为方形矩阵

a = [[1,2],[3,4],[5,6],[7,8]]
b = [[1,2,3,4],[5,6,7,8]]

我希望输出为

a1 = [[1,2,0,0],[3,4,0,0],[5,6,0,0],[7,8,0,0]]
b1 = [[1,2,3,4],[5,6,7,8][0,0,0,0],[0,0,0,0]]

我在我的机器上安装numpy包时遇到问题。没有使用numpy的任何解决方案都会有很大的帮助。

由于

4 个答案:

答案 0 :(得分:4)

>>> a = [[1,2], [3,4], [5,6], [7,8]]
>>> b = [[1,2,3,4], [5,6,7,8]]
>>>
>>> def matrix(a, n):
...     for row in a:
...         yield row + [0] * (n - len(row))
...     for i in range(len(a), n):
...         yield [0] * n
...
>>> list(matrix(a, 4))
[[1, 2, 0, 0], [3, 4, 0, 0], [5, 6, 0, 0], [7, 8, 0, 0]]
>>> list(matrix(b, 4))
[[1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 0, 0], [0, 0, 0, 0]]

答案 1 :(得分:0)

这个小功能应该可以解决问题:

def squarify(lst, n):
    for sublist in lst:
        while len(sublist) < n:
            sublist.append(0)

    while len(lst) < n:
        lst.append([0]*n)

答案 2 :(得分:0)

您需要两条信息:最长的行和最多的列数。要获得最长的行,假设您可以假设每个矩阵都有一定数量的行,则需要执行类似

的操作
rowAlen = len(a[0])
rowBlen = len(b[0])
longestRow = 0;
if rowAlen > rowBlen:
    longestRow = rowAlen
else:
    longestRow = rowBlen

然后,您需要获得列数最多的列数。

colAlen = len(a)
colBlen = len(b)
maxCol = 0;
if colAlen > colBlen:
    maxCol = colAlen
else:
    maxCol = colBlen

现在你有了longRow和maxCol,你可以操纵矩阵。

for x in range(0,maxCol):
    if colAlen <= x:
        a.append([])

    if colBlen <= x:
        b.append([])

    for y in range(0, longestRow):
        if len(a[x]) <= y:
            a[x].append(0)

        if len(b[x]) <= y:
            b[x].append(0)

答案 3 :(得分:0)

这将返回您要查找的输出,如果它存储在变量中,则会更改原始列表。

def matrize(L):
  msize = max(len(L), max([len(subL) for subL in L]))
  for item in L:
    while len(item)<msize: item.append(0)
  zrow = [0]*msize
  while len(L)< msize: L.append(zrow)
  return L