给定一个二维矩阵,例如
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)。
有更好的方法吗?
编辑:
感谢马蒂诺指出了这个问题的这些要点。 对不起,我以前没有指出。
下面是一个非常有效的方法,它可以用于非平方矩阵:
输出(注意结果是累积的,因为操作已经执行到位,并且移位应用于上一次调用的结果):
可能是这样使用
numpy
:结果:
Numpy提供了一个名为roll()的方法来移动条目。
我想与大多数解决方案相比,Numpy将非常有效
在矩阵运算方面,你不会被束缚在二维矩阵上。
相关问题 更多 >
编程相关推荐