python - 在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
函数,然后将其转换为 a numpy array
,但用 python 编写它可能不是什么好东西。是否有任何函数可以替换更大的类数组矩阵中的数组位置numpy
?
解决方案
取转数的函数
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]])
推荐阅读
- java - 如何修复 ProGuard 错误
- pyspark - pyspark sum 使用开始和结束日期按月份和日期分组
- ruby-on-rails - 如何使用 Ruby 生成两个地址之间的 IP 地址列表
- php - 将字符和数字之间的字符串拆分为数组PHP
- php - 删除 Woocommerce 帐单字段不会将其从我的帐户帐单地址中删除
- java - ConcreteA 不是抽象的,不会覆盖 InterfaceC 中的抽象方法 doSomething(InterfaceA)
- git - 将深度嵌套的 Rust `Result`s 和 `Option`s 处理重构为更具功能性的风格
- python - 如何控制plotnine中的刻面高度和宽度?
- sql - 根据与另一个表的几何相交将列数据添加到表中 - PostgreSQL
- machine-learning - Gensim 的潜在狄利克雷分配实现