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

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

发布时间:2020-05-24 22:44:06 所属栏目: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,7,8,9,10], [1,2,3,4,5]], [[11,12,13,14,15], [6,7,8,9,10]], [[16,

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

(编辑:安卓应用网)

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

    推荐文章
      热点阅读