为了账号安全,请及时绑定邮箱和手机立即绑定

在 numpy 中更改较大数组的数组的位置

在 numpy 中更改较大数组的数组的位置

BIG阳 2023-03-08 15:19:23
我有一个像矩阵numpy这样的数组。import numpy as npa = 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?
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

取转数的函数


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()method。


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]])


查看完整回答
反对 回复 2023-03-08
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果您使用这行简单的代码,这将非常容易。不需要功能和其他东西。
只需使用numpy.roll请参阅此处的解释

# Assume your matrix is named a.

>>> a


array([[ 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]])


查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号