想在python中创建如下矩阵
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
但不确定该怎么做,我尝试了如下列表理解
[[y+x for y in range(4)] for x in range(4)]
输出如下
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
并且还想打印总和最大的行和总和最大的列。
提前致谢
最佳答案
[[x * 4 + y + 1 for y in range(4)] for x in range(4)]
相当于:
[[(x << 2) + y for y in range(1, 5)] for x in range(4)]
这里有一个小基准:
import timeit
def f1():
return [[x * 4 + y + 1 for y in range(4)] for x in range(4)]
def f2():
return [[(x << 2) + y for y in range(1, 5)] for x in range(4)]
def f3():
a = range(1, 5)
return [[(x << 2) + y for y in a] for x in range(4)]
N = 5000000
print timeit.timeit('f1()', setup='from __main__ import f1', number=N)
print timeit.timeit('f2()', setup='from __main__ import f2', number=N)
print timeit.timeit('f3()', setup='from __main__ import f3', number=N)
# 13.683984791
# 13.4605276559
# 9.65608339037
# [Finished in 36.9s]
我们可以得出结论,f1 和 f2 方法的性能几乎相同。所以像 f3 一样只计算一次内部 range(1,5)
是个不错的选择
关于不使用 numpy 或任何东西的 python 矩阵创建以及行和列的最大总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39250315/