答案 0 :(得分:3)
假设您有一个名为N*N
的{{1}}数组,则可以简单地执行以下操作:
a
提取第np.concatenate((a[k:-k:N-2*k-1,k:-k], a[k+1:-k-1,k:-k:N-2*k-1]), None)
轮(从零开始),其中第一个切片代表两行,第二个切片代表两列。
示例(对输出进行排序以便于验证)
k
它将输出:
N = 8
k = 1
a = np.arange(N * N).reshape(N, N)
print(a)
print(np.sort(np.concatenate((a[k:-k:N-2*k-1,k:-k], a[k+1:-k-1,k:-k:N-2*k-1]), None)))
答案 1 :(得分:1)
使用布尔mask
数组:
arr = np.random.permutation(np.arange(25)).reshape(5,5)
>>> arr
array([[15, 9, 7, 1, 22],
[16, 4, 2, 19, 13],
[12, 3, 23, 8, 6],
[ 0, 20, 21, 10, 14],
[18, 5, 24, 11, 17]])
以上是为此目的建立一个随机矩阵。
# Build mask
mask = np.ones((5,5)) == True
mask[1:4, 1:4] = False
>>> mask
array([[ True, True, True, True, True],
[ True, False, False, False, True],
[ True, False, False, False, True],
[ True, False, False, False, True],
[ True, True, True, True, True]])
# Extract values:
>>> arr[mask]
array([15, 9, 7, 1, 22, 16, 13, 12, 6, 0, 14, 18, 5, 24, 11, 17])
为内圆构建下一个蒙版:
mask = np.ones((5,5)) == False
mask[1:4, 1:4] = True
mask[2,2] = False
>>> mask
array([[False, False, False, False, False],
[False, True, True, True, False],
[False, True, False, True, False],
[False, True, True, True, False],
[False, False, False, False, False]])
arr[mask]
>>> array([ 0, 15, 20, 16, 4, 1, 6, 8])