首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过较大的矩阵在子矩阵中迭代

通过较大的矩阵在子矩阵中迭代
EN

Stack Overflow用户
提问于 2017-03-15 14:41:19
回答 1查看 1.2K关注 0票数 3

我寻找一种方法,我使用for循环可以迭代一个更大的矩阵,其中每个迭代将输出一个子矩阵的大小(行,颜色,深度) (6,3,3)。

我的大矩阵存储为numpy矩阵,并且可能也希望每一次迭代都以这样的方式输出。

代码语言:javascript
复制
>>> import numpy as np
>>> a = np.random.rand(6*3,3*3,3)
>>> print a.shape
(18, 9, 3)
>>> print a
>>> b

变量b应包含矩阵a中大小的所有子矩阵(6,3,3),每个子矩阵不应与先前的矩阵重叠。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 15:03:55

方法#1

我假设我们正在寻找non-overlapping/distinct块。因此,我们可以使用Scikit-image's view_as_blocks实用程序-

代码语言:javascript
复制
from skimage.util.shape import view_as_blocks

BSZ = (6,3,3)
out = view_as_blocks(a,BSZ).reshape((-1,)+ (BSZ))

样本运行-

代码语言:javascript
复制
In [279]: a = np.random.rand(6*3,3*3,3)

In [280]: out = view_as_blocks(a,BSZ).reshape((-1,)+ (BSZ))

In [281]: out.shape
Out[281]: (9, 6, 3, 3)

方法#2

只使用本地的NumPy工具,比如reshapingtranspose,有一种方法-

代码语言:javascript
复制
m,n,r = a.shape
split_shp = m//BSZ[0], BSZ[0], n//BSZ[1], BSZ[1], r//BSZ[2], BSZ[2]
out = a.reshape(split_shp).transpose(0,2,4,1,3,5).reshape((-1,)+ (BSZ))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42812918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档