带有重复行的2d NumPy数组重塑为3d

前端之家收集整理的这篇文章主要介绍了带有重复行的2d NumPy数组重塑为3d 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个NumPy数组,如下所示:

arr = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]])

我正在寻找这样的安排:

[[[6,[1,5]],[[11,10]],[[16,20],15]]]

因此本质上是一个3D阵列,阵列的每一行都有2×5.
我试过的代码是:

x=np.zeros([3,5])
for i in range(len(arr)):
    x[i]=arr[i:i+2,:][::-1]

但这导致以下输出

[[[ 6.  7.  8.  9. 10.]
  [ 1.  2.  3.  4.  5.]]    
 [[ 0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.]]  
 [[ 0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.]]]

[[[ 6.  7.  8.  9. 10.]
  [ 1.  2.  3.  4.  5.]]    
 [[11. 12. 13. 14. 15.]
  [ 6.  7.  8.  9. 10.]]    
 [[ 0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.]]]

[[[ 6.  7.  8.  9. 10.]
  [ 1.  2.  3.  4.  5.]]    
 [[11. 12. 13. 14. 15.]
  [ 6.  7.  8.  9. 10.]]    
 [[16. 17. 18. 19. 20.]
  [11. 12. 13. 14. 15.]]]
最佳答案
我们可以利用基于np.lib.stride_tricks.as_stridedscikit-image's view_as_windows获取滑动窗口. More info on use of as_strided based view_as_windows.

from skimage.util.shape import view_as_windows

x = view_as_windows(arr,(2,arr.shape[1]))[:,::-1]

这只是输入数组的视图.因此,没有额外的内存开销和几乎免费的运行时.如果要使用自己的内存空间进行输出,请在其中附加.copy(),即x.copy().

样品运行-

In [15]: from skimage.util.shape import view_as_windows

In [16]: view_as_windows(arr,::-1]
Out[16]: 
array([[[ 6,[ 1,[ 6,15]]])

猜你在找的Python相关文章