首页 > 解决方案 > 在numpy中更改更大数组的数组的位置

问题描述

我有一个像这样使用的矩阵的数组numpy

import numpy as np

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]])

所需的数组是这样的:

array([[ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],])

描述:第一个和第二个数组移动到矩阵的末尾。我尝试了更改a为 alist并使用appenddel函数,然后将其转换为 a numpy array,但用 python 编写它可能不是什么好东西。是否有任何函数可以替换更大的类数组矩阵中的数组位置numpy

标签: pythonarraysnumpy

解决方案


取转数的函数

In [5]: a
Out[5]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

In [14]: def rotate(n):
...:         n = n%len(a)
...:         return np.concatenate([a[n:], a[:n]])

In [13]: rotate(2)
Out[13]:
array([[ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8]])

如果你给出n的长度超过了数组的长度怎么办?处理好了——n = n%len(a)

In [16]: rotate(9)
Out[16]:
array([[17, 18, 19, 20],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])

评论中给出的另一个解决方案是roll()方法。

In [6]: a
Out[6]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

In [7]: def rotate(n):
   ...:     n = n % len(a)
   ...:     return np.roll(a,-n,axis=0)
   ...:

In [8]: rotate(8)
Out[8]:
array([[13, 14, 15, 16],
       [17, 18, 19, 20],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

In [9]: rotate(2)
Out[9]:
array([[ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20],
       [ 1,  2,  3,  4],
       [ 5,  6,  7,  8]])

推荐阅读