我想通过在必要时插入零来将给定矩阵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的任何解决方案都会有很大的帮助。
由于
答案 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