我一直试图通过使用不超过一个循环,或者更好的是根本不使用循环来重塑Numty数组。但是在多次尝试使用np.reshape()和np.transpose()之后,我仍然不知道如何转换这样的数组:
array([[1,2,6,3,2,5],
[9,4,7,3,2,6],
[8,4,6,3,2,6],
[9,5,0,4,5,2],
[0,5,2,6,4,2],
[8,6,2,5,7,4]])
转换成如下所示的数组:
[[1,2,9,4,8,4,0,5,8,6],
[6,3,7,3,6,3,0,4,2,6,2,5],
[2,5,2,6,2,6,5,2,4,2,7,4]]
我看到的模式是,
# original
[[x11, x12, x13, x14, x15, x16],
[x21, x22, x23, x24, x25, x26],
[x31, x32, x33, x34, x35, x36],
[x41, x42, x43, x44, x45, x46],
[x51, x52, x53, x54, x55, x56],
[x61, x62, x63, x64, x65, x66]]
# result
[[x11, x12, x21, x22, x31, x32, x41, x42, x51, x52, x61, x62],
[x13, x14, x23, x23, x33, x34, x43, x44, x53, x54, x63, x64],
[x15, x16, x25, x26, x35, x36, x45, x46, x55, x56, x65, x66]]
但我最大的问题是连接到如上所示的行,特别是使用矢量化而不是循环。但我甚至不能用One Loop做到这一点。我需要两个。
就像我说的,我尝试了很多东西。例如,我将原始数组重塑为
[[1,2]
[6,3],
[2,5],
[9,4],
[7,3],
[2,6]
[8,4],
[6,3],
[2,6]
[9,5],
[0,4],
[5,2],
[0,5],
[2,6],
[4,2],
[8,6],
[2,5],
[7,4]]
从那时起,我不知道如何使用行来获得所需的数组。
我还试图立即重塑数组以匹配所需的形状,但随后也很难使值与所需的结果匹配。
3条答案
按热度按时间iszxjhcz1#
请注意,
reshape
不能更改数组中元素的顺序,只能更改步长。但是使用sliding_window_view
非常简单。当然,我们只需要每隔一对列,因此是::window[1]
,最终您希望将列对作为一行,因此是reshape
。gzszwxb42#
如果我们知道数组的维度,我们可以使用一种简单的方法:
vybvopom3#
有很多方法可以做到这一点,但直接重塑不是其中之一。在你的情况下,我会这样做