[英]1d numpy array to blocks in a matrix
我有一個 1D 數組,我需要將其reshape()
轉換為 2D 數組,但是 reshape 很棘手,因為它似乎需要某種分組。
我嘗試了幾個不同系列的 reshape() 和 transpose() 組合,但我還沒有找到正確的值排列方式。
我在下面提供了兩個 arrays。 我想重塑一維數組a
以具有與二維數組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的基本步驟對於這類問題是常見的。 轉調很詳細。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.