我需要对一个 numpy 数组进行切片,以便获得一个对应于深绿色区域的数组: array
绿色区域是列和行中多个范围的交集。我想到了类似的东西:
M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)
但它不起作用。我怎样才能有效地做到这一点?
我需要对一个 numpy 数组进行切片,以便获得一个对应于深绿色区域的数组: array
绿色区域是列和行中多个范围的交集。我想到了类似的东西:
M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)
但它不起作用。我怎样才能有效地做到这一点?
我认为您只需要分别执行每个深绿色部分,例如:
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))
我使用这个 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)
可能有一种更有效的方法来定义行和列,但这对我有用
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]]))
但是你仍然需要交换线路