gpt4 book ai didi

python - 双向移动二维矩阵的有效方法?

转载 作者:太空狗 更新时间:2023-10-29 17:39:03 24 4
gpt4 key购买 nike

给定一个二维矩阵,例如

l = [[1,1,1],
[2,5,2],
[3,3,3]])

对列和行执行移位操作的最有效方法是什么?

例如

shift('up', l) 

[[2, 5, 2],
[3, 3, 3],
[1, 1, 1]]

但是

shift('left', l) 

[[1, 1, 1],
[5, 2, 2],
[3, 3, 3]]

由于 this answer,我在两个深度上都使用了 collections.deque但是,虽然“向上”或“向下”只需要 1 次移位,但“向左”或“向右”需要 N 次移位(我的实现是对每一行使用 for 循环)。

在 C 中,我认为这可以使用指针算法来改进(参见例如 this answer)。

有没有更好的pythonic方式?

编辑:

  • 我所说的高效是指是否有办法避免 N 次轮类。
  • 我们可以假设矩阵是平方的。
  • 转变可以到位。

感谢 martineau 指出问题的这些要点。很抱歉我之前没有指出它们。

最佳答案

Numpy 提供了一种称为 roll() 的方法来移动条目。

>>> import numpy as np
>>> x = np.arange(9)
>>> x = x.reshape(3, 3)
>>> print(x)

[[0 1 2]
[3 4 5]
[6 7 8]]

>>> x = np.roll(x, -1, axis=0) # up
>>> print(x)

[[3 4 5]
[6 7 8]
[0 1 2]]

>>> x = np.roll(x, 1, axis=0) # down
>>> print(x)

[[0 1 2]
[3 4 5]
[6 7 8]]

>>> x = np.roll(x, 2, axis=1) # right
>>> print(x)

[[1 2 0]
[4 5 3]
[7 8 6]]

>>> x = np.roll(x, -2, axis=1) # left
>>> print(x)

[[0 1 2]
[3 4 5]
[6 7 8]]

我猜 Numpy与大多数解决方案相比将非常有效
在矩阵运算方面,你不会被二维矩阵所束缚。

关于python - 双向移动二维矩阵的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19878280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com