首页 > 解决方案 > NumPy:将 1D 数组转换并重塑为 2D 数组,用零?

问题描述

如何将以下列表转换并重塑为带有零的二维数组?

# original list 
[1, 0.96, 0.92, 0.88]

# 2D Array
[[1     0     0     0   ]
 [0.96  1     0     0   ]
 [0.92  0.96  1     0   ]
 [0.88  0.92  0.96  1   ]]

标签: pythonnumpynumpy-ndarray

解决方案


这是一种时髦的矢量化方式。我们可以利用np.lib.stride_tricks.as_stridedbasedscikit-image's view_as_windows来获得滑动窗口视图并解决它。

from skimage.util.shape import view_as_windows

# a is input array (convert to array with np.array() is input is list)
p = np.r_[a[::-1], np.zeros(len(a)-1, dtype=a.dtype)]
out = view_as_windows(p,len(a))[::-1]

或者,将其保留为 NumPy -

m = len(a)
n = p.strides[0]
out = np.lib.stride_tricks.as_strided(p[m-1:], shape=(m,m), strides=(-n,n))

推荐阅读