0

我需要对一个 numpy 数组进行切片,以便获得一个对应于深绿色区域的数组: array

绿色区域是列和行中多个范围的交集。我想到了类似的东西:

M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)

但它不起作用。我怎样才能有效地做到这一点?

4

3 回答 3

1

我认为您只需要分别执行每个深绿色部分,例如:

M[1:3, 5:7] = np.zeros((2,2))

然后重复其他深绿色区域。

编辑:我想我更了解你想做什么,你想更动态地做,所以我认为这样的事情会起作用:

ta = slice(1, 3)
tb = slice(5, 7)
slices=[ta, tb]
slices = [(s1, s2) for s1 in slices for s2 in slices] #Gives all combinations of slices
for s in slices:
    M[s] = np.zeros((2,2))
于 2019-11-21T09:43:34.213 回答
1

我使用这个 matlab 找到了一个答案,比如在 stackoverflow 上使用 numpy 进行数组索引

我添加了一个数组来做我想做的事。最终代码是:

rows = np.hstack((np.arange(1,3), np.arange(5,7)))
cols = np.hstack((np.arange(1,3), np.arange(5,7)))

M[np.ix_(rc,rc)]=np.zeros(4,4)

可能有一种更有效的方法来定义行和列,但这对我有用

于 2019-11-21T10:27:11.187 回答
0

UPDATE 实际上它是这样工作的:

np.hstack((x[[1,2,5,6], 1:3], x[[1,2,5,6], 5:7]))

我发现的最佳选择:

np.vstack((x[1:9:4, [1,2,5,6]], x[2:9:4, [1,2,5,6]])) 

但是你仍然需要交换线路

于 2019-11-21T11:03:22.170 回答