首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何平移/移位numpy数组?

如何平移/移位numpy数组?
EN

Stack Overflow用户
提问于 2017-07-03 03:35:14
回答 2查看 8.8K关注 0票数 3

我不确定要搜索的关键字,所以如果它已经被询问,请链接响应并关闭此线程。

我尝试将numpy数组的非零条目按固定方向移位,例如,假设我有一个二维数组:

代码语言:javascript
复制
0 1 2 0
0 3 0 0
0 0 0 0
0 0 0 0

将其移位(1,1)将产生以下数组:

代码语言:javascript
复制
0 0 0 0
0 0 1 2
0 0 3 0
0 0 0 0

比方说,如果非零条目超出了界限,它们就会被丢弃。我该怎么做呢?

Shift elements in a numpy array我真的不明白为什么它们是同一个问题,因为那个问题是关于循环出边界的,所以它更像是一个“滚动”动作,而不是移位。我也喜欢这里的解决方案,它非常简单和可读性好。

重新编辑:修正了一些格式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-03 04:08:08

要简单地管理边缘,您可以将数组放大到更大的数组中:

代码语言:javascript
复制
square=\
array([[0, 2, 2, 0],
       [0, 2, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int64)

n,m=square.shape
bigsquare=np.zeros((3*n,3*m),square.dtype) 
bigsquare[n:2*n,m:2*m]=square

那么shift只是一个视图:

代码语言:javascript
复制
def shift(dx,dy):
    x=n-dx
    y=m-dy
    return bigsquare[x:x+n,y:y+m]

print(shift(1,1))

#[[0 0 0 0]
# [0 0 2 2]
# [0 0 2 0]
# [0 0 0 0]]
票数 2
EN

Stack Overflow用户

发布于 2019-10-28 07:08:25

在numpy中使用roll方法。

代码语言:javascript
复制
>>> import numpy as np
>>> m
array([[0, 1, 2, 0],
       [0, 3, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
>>> m = np.roll(m, 1, axis=0) # shift 1 place in horizontal axis
>>> m = np.roll(m, 1, axis=1) # shift 1 place in vertical axis
>>> m
array([[0, 0, 0, 0],
       [0, 0, 1, 2],
       [0, 0, 3, 0],
       [0, 0, 0, 0]])

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.roll.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44874512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档