gpt4 book ai didi

python - Numpy reshape 保留一些尺寸

转载 作者:行者123 更新时间:2023-11-28 17:11:01 24 4
gpt4 key购买 nike

我要这个

# assume each 2x2 as assigned number on right

[[[False True] # 1
[False False]]

[[False False] # 2
[False True]]

[[ True False] # 3
[False False]]

[[False True] # 4
[False False]]]

reshape 成

[[[[False  True False False]
[False False False True]
[ True False False True]
[False False False False]]]]

如在

[[[[False  True | False False]                # 1 | 2
[False False | False True] ___ ___
---------- -----------
[ True False | False True] # 3 | 4
[False False | False False]]]]

但我在使用 arr.reshape(1,1,4,4)

时得到
[[[[False  True False False]                   # 1 flat
[False False False True] # 2 flat
[ True False False False] # 3 flat
[False True False False]]]] # 4 flat

请注意,每个 2x2 都被展平了。我希望 numpy reshape 形状,使 2x2 保持不变,同时调整之前的尺寸。我该怎么做?


编辑: arr 的形状是 m,n,rm 可能是奇数

编辑 2:

将 9x2x2 变成 1x1x6x6

我有什么:

[[[False False]
[False True]]

[[False False]
[False True]]

[[ True False]
[False False]]

[[False False]
[False True]]

[[False False]
[ True False]]

[[False False]
[ True False]]

[[False True]
[False False]]

[[False False]
[ True False]]

[[ True False]
[False False]]]

预期:

[[[[False False | False False |  True False]
[False True | False True | False False]
----------- ----------- ----------
[False False | False False | False False]
[False True | True False | True False]
---------- ----------- -----------
[False True | False False | True False]
[False False | True False | False False]]]]

我得到的:

[[[[False False False  True False False]          # 1 flattened; half of 2
[False True True False False False] # rem half of 2; flattened 3
[False False False True False True] # ...
[False False False True False False]
[False False True False False True]
[False False True False False False]]]]

最佳答案

难题 的重要部分是第一个轴是一个平方数,我们将它除以那个平方根数,得到一个 4D 数组。如果第一个轴不是平方数,我们将需要另一个输入参数来告诉我们要在最终输出中沿列或行保留的 block 数。拆分后,交换轴 12 最后 reshape -

m = int(np.rint(np.sqrt(a.shape[0])))
out = a.reshape(m,m,2,2).swapaxes(1,2).reshape(m*2,-1)

sample 运行-

1] 输入:

In [69]: a
Out[69]:
array([[[False, False],
[False, True]],

[[False, False],
[False, True]],

[[ True, False],
[False, False]],

[[False, False],
[False, True]],

[[False, False],
[ True, False]],

[[False, False],
[ True, False]],

[[False, True],
[False, False]],

[[False, False],
[ True, False]],

[[ True, False],
[False, False]]], dtype=bool)

2] 输出:

In [70]: m = int(np.sqrt(a.shape[0]))

In [71]: a.reshape(m,m,2,2).swapaxes(1,2).reshape(m*2,-1)
Out[71]:
array([[False, False, False, False, True, False],
[False, True, False, True, False, False],
[False, False, False, False, False, False],
[False, True, True, False, True, False],
[False, True, False, False, True, False],
[False, False, True, False, False, False]], dtype=bool)

关于python - Numpy reshape 保留一些尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47462568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com