太长,没有阅读
如何生成ndarray索引,以便对于每一新行,索引与上一个索引在同一列上继续。如下图所示,但对于n维数组。这有时被称为“蛇形”、“蛇形”或“之字形”扫描模式。
简介
np.ndindex(shape)
生成该数组索引的迭代器,如:
>>> list(np.ndindex((3,3)))
[(0, 0), (0, 1), (0, 2),
(1, 0), (1, 1), (1, 2),
(2, 0), (2, 1), (2, 2)]
我希望生成相同的索引,但顺序是使下一个像素始终与前一个相邻。在当前形式中,ndindex从第一列开始,每一行都是新行。当当前行到达最后一列时,我希望它从同一列继续到下一行。我将其形象化为“蛇式”(在蛇游戏之后)索引(下面的代码片段*):
对于二维阵列,我可以通过每两行反转来实现这一点:
>>> shape = (3,3)
>>> A = list(np.ndindex(shape))
>>> A = np.reshape(A, shape + (len(shape), ))
>>> A[1::2] = A[1::2, ::-1]
>>> A.reshape((np.prod(shape), len(shape)))
[[0, 0], [0, 1], [0, 2],
[1, 2], [1, 1], [1, 0],
[2, 0], [2, 1], [2, 2]]
然而,当我尝试对一个三维矩阵这样做时,我遇到了问题。在这里,我使用了一种稍微不同的方法来简化绘图(使用单个索引)。你知道吗
一个问题是,由于numpy切片表示法,似乎很难将其推广到n维数组。第二个问题是,对于三维数组,数组的第二个切片从底部开始,该行要么左右翻转,要么不翻转,这取决于该轴的大小是奇数还是偶数。你知道吗
有人有解决办法吗?你知道吗
**第二个数字的硬编码数组
data = np.array([
[
[0,1,2],
[5,4,3],
[6,7,8]],
[
[17,16,15],
[12,13,14],
[11,10,9]],
[
[18,19,20],
[23,22,21],
[24,25,26]]
])
fig, AX = plt.subplots(ncols=3)
for d, ax in zip(data, AX):
ax.imshow(d, clim=(data.min(), data.max()), cmap='Greys')
这里有一种可能,即一次创建迭代器或整个数组:
演示:
相关问题 更多 >
编程相关推荐