加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 17:36:38 所属栏目:Python 来源:网络整理
导读:我有一个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阵列,阵列的每一行都有25. 我试过的代码是: x=np.zeros([3

我有一个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]]])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读