猿问

在 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并使用append和del函数,然后将其转换为 anumpy array但用 python 编写可能不是什么好东西。是否有任何函数可以替换更大的类数组矩阵中的数组位置numpy?


BIG阳
浏览 154回答 2
2回答

眼眸繁星

取转数的函数In [5]: aOut[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()method。In [6]: aOut[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]])

泛舟湖上清波郎朗

如果您使用这行简单的代码,这将非常容易。不需要功能和其他东西。只需使用numpy.roll. 请参阅此处的解释# Assume your matrix is named a.>>> aarray([[ 1,  2,  3,  4],       [ 5,  6,  7,  8],       [ 9, 10, 11, 12],       [13, 14, 15, 16],       [17, 18, 19, 20]])>>> np.roll(a,-(n % len(a)),axis=0)array([[ 9, 10, 11, 12],       [13, 14, 15, 16],       [17, 18, 19, 20],       [ 1,  2,  3,  4],       [ 5,  6,  7,  8]])
随时随地看视频慕课网APP

相关分类

Python
我要回答