不使用 numpy 或任何东西的 python 矩阵创建以及行和列的最大总和

标签 python matrix

想在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/

相关文章:

python - SQLAlchemy 的 session.merge() 可以用数据库中的新数据更新它的结果吗?

Python 2.6 通过队列/管道/等发送连接对象

r - 按列从矩阵中提取 block

python - 在某些行/列值处提取子矩阵

javascript - "How can I code a 2 dimension array input in Javascript such that it looks like this?"

python - 在 Python 中验证长链条件的 Pythonic 方法

python - 在主脚本中捕获子进程中生成的 jpg

python - 查找具有不同强度/亮度的相似图像

c++ - 如何定义和平滑 3D cv::Mat

从长格式的值重建对称矩阵