【发布时间】:2018-06-06 09:06:54
【问题描述】:
我在尝试将 Cesar Cipher 应用于每行具有不同移位值的矩阵时提出了这个问题,即给定矩阵 X
array([[1, 0, 8],
[5, 1, 4],
[2, 1, 1]])
移位值为S = array([0, 1, 1]),输出需要是
array([[1, 0, 8],
[1, 4, 5],
[1, 1, 2]])
这很容易通过以下代码实现:
Y = []
for i in range(X.shape[0]):
if (S[i] > 0):
Y.append( X[i,S[i]::].tolist() + X[i,:S[i]:].tolist() )
else:
Y.append(X[i,:].tolist())
Y = np.array(Y)
这是一个左循环移位。我想知道如何使用 numpy 数组以更有效的方式做到这一点?
更新:此示例将移位应用于矩阵的列。假设我们有一个 3D 数组
array([[[8, 1, 8],
[8, 6, 2],
[5, 3, 7]],
[[4, 1, 0],
[5, 9, 5],
[5, 1, 7]],
[[9, 8, 6],
[5, 1, 0],
[5, 5, 4]]])
然后,S = array([0, 0, 1]) 在列上的循环右移导致
array([[[8, 1, 7],
[8, 6, 8],
[5, 3, 2]],
[[4, 1, 7],
[5, 9, 0],
[5, 1, 5]],
[[9, 8, 4],
[5, 1, 6],
[5, 5, 0]]])
【问题讨论】:
-
不应该是
[2,7,8]用于 3D 案例中的最后一列等等吗? -
这可能是左移。
-
啊,是的,你提到了右移,谢谢。
标签: python python-2.7 numpy slice