我不确定要搜索的关键字,所以如果它已经被询问,请链接响应并关闭此线程。
我尝试将numpy数组的非零条目按固定方向移位,例如,假设我有一个二维数组:
0 1 2 0
0 3 0 0
0 0 0 0
0 0 0 0将其移位(1,1)将产生以下数组:
0 0 0 0
0 0 1 2
0 0 3 0
0 0 0 0比方说,如果非零条目超出了界限,它们就会被丢弃。我该怎么做呢?
Shift elements in a numpy array我真的不明白为什么它们是同一个问题,因为那个问题是关于循环出边界的,所以它更像是一个“滚动”动作,而不是移位。我也喜欢这里的解决方案,它非常简单和可读性好。
重新编辑:修正了一些格式
发布于 2017-07-03 04:08:08
要简单地管理边缘,您可以将数组放大到更大的数组中:
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只是一个视图:
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]]发布于 2019-10-28 07:08:25
在numpy中使用roll方法。
>>> 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
https://stackoverflow.com/questions/44874512
复制相似问题