【发布时间】:2016-09-05 13:08:55
【问题描述】:
我有一些 Python 代码,目前与二维数组硬连线如下:
import numpy as np
data = np.random.rand(5, 5)
width = 3
for y in range(0, data.shape[1] - W + 1):
for x in range(0, data.shape[0] - W + 1):
block = data[x:x+W, y:y+W]
# Do something with this block
现在,这是为二维数组硬编码的,我想将其扩展到 3D 和 4D 数组。当然,我可以为其他维度编写更多函数,但我想知道是否有 python/numpy 技巧来生成这些子块,而不必为多维数据复制此函数。
【问题讨论】:
-
ndim会给你维度的数量。如果你构造你的代码来迭代range(arr.ndim),那么你将重复你正在为数组中的维数所做的任何事情 -
@Andrew 感谢您的评论。问题是我无法弄清楚如何构建这些也将具有
ndim尺寸的块。既然我写了这个,也许列表理解可能是一种方法...... -
我通常会发现,如果我在迭代
numpy数组,几乎总有一个更好的解决方案可以更有效地使用numpy -
是的,在这里尽我所能。如果我破解它,我会更新:)
-
看起来您有一个 5x5 数组,并且您正在收集其中的所有 3x3 数组。您是否在问:如果您有一个 5x5x5,如何收集所有 3x3x3 阵列?或者:如何为 5 层中的每一层收集所有 3x3?换句话说,收集的数据是否应该与输入数据具有相同的维度?
标签: python numpy multidimensional-array