我有一个大小为n的元素列表b。 我想从此列表中创建一个大小为(n-1,n)的二维numpy数组,以使第i行是b的元素,而没有第i项。
例如,如果
b = [1,2,3,4]
numpy数组将是
A = np.array( [[2,3,4],
[1,3,4],
[1,2,4],
[1,2,3]])
答案 0 :(得分:1)
方法1:一种使用masking
的方法-
n = len(b)
b2D = np.broadcast_to(b, (n,n)) # or np.repeat(b[None],n,axis=0)
out = b2D[~np.eye(n, dtype=bool)].reshape(n,-1)
方法2::关注性能和内存效率,另一个关注NumPy strides
-
strided = np.lib.stride_tricks.as_strided
n = len(b)
b_ext = np.r_[b[1:],b[:-1]]
s = b_ext.strides[0]
out = strided(b_ext, shape=(n-1,n), strides=(s,s)).reshape(n,-1)