python - 1d numpy 数组到矩阵中的块
问题描述
我有一个 1D 数组,我需要将其reshape()
转换为 2D 数组,但是重塑很棘手,因为似乎需要某种分组。
我尝试了几个不同系列的 reshape() 和 transpose() 组合,但我还没有找到正确的值排列方式。
我在下面提供了两个数组。我想重塑 1D 数组a
以具有与 2D 数组相同的形状b
。这个技巧的原因是我想要中间的 4 个。我做了一些尝试,为每 4 个值制作 2x2 块,然后排列到 6x6 数组中,但我没有成功。
a = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
b = np.array([
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
这里是形状
> a.shape
(36,)
> b.shape
(6, 6)
解决方案
这样做:
In [327]: a = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
...: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
...:
In [328]: a.reshape(3,3,2,2)
Out[328]:
array([[[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]],
[[[0, 0],
[0, 0]],
[[1, 1],
[1, 1]],
[[0, 0],
[0, 0]]],
[[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]]])
1s 的 (2,2) 块是可见的,但我需要切换中间的 2 个维度:
In [329]: a.reshape(3,3,2,2).transpose(0,2,1,3)
Out[329]:
array([[[[0, 0],
[0, 0],
[0, 0]],
[[0, 0],
[0, 0],
[0, 0]]],
[[[0, 0],
[1, 1],
[0, 0]],
[[0, 0],
[1, 1],
[0, 0]]],
[[[0, 0],
[0, 0],
[0, 0]],
[[0, 0],
[0, 0],
[0, 0]]]])
现在回到二维:
In [330]: a.reshape(3,3,2,2).transpose(0,2,1,3).reshape(6,6)
Out[330]:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
reshape,transpose,然后是reshape的基本步骤对于这类问题是常见的。转调很详细。
推荐阅读
- javascript - 如何通过 AngularJS 复选框进行过滤?
- ios - Wrong gamma/color lut on mtkview display on iPhone Xs
- python - Dict() index (from input int) printing associated value
- javascript - Blogger javascript 无法使用 http 到 https
- c# - How to add CSV reader "records" to database?
- python - How to replace similar meaning words with a common synonym in a text
- python - Implementing the Number of Swaps and Comparisons
- regex - 如何转换使用 Lookahead 的正则表达式模式?
- mongodb - How to add every other columns together in Mongo?
- c++ - Docker Centos, Cannot Execute Binary File