【发布时间】:2017-01-17 13:37:12
【问题描述】:
我有一个 3d 数组 m*n*k,并且对于每个 2d 层,我想要一个大小为 i*j 的子数组。我有一个数组 c,其大小为 2*k,每一层的切片起点坐标。有没有简单的方法来获得我需要的东西而无需任何循环?
例子:
test = np.arange(18).reshape((3,3,2))
c = np.array([[0,1], [0, 1]])
test[:,:,0] = array([[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
test[:,:,1] = array([[ 1, 3, 5],
[ 7, 9, 11],
[13, 15, 17]])
我想要一个数组
[[[ 0, 9],
[ 2, 11]],
[[ 6, 15],
[ 8, 17]]]
带循环的解决方案:
h=2
w=2
layers = 2
F = np.zeros((h,w,layers))
for k in range(layers):
F[:,:,k] = test[c[0,k]:c[0,k]+h, c[1,k]:c[1,k]+w, k]
【问题讨论】:
-
您能否分享一下您将如何使用循环来实现它,因为从给定的输入中获取预期的 o/p 尚不清楚?
-
添加了循环解决方案
-
当我在给定的输入上运行代码时,我看到了
IndexError。 -
糟糕。已修复,抱歉。
标签: python arrays numpy vectorization