通过一次删除一项从矢量创建一个numpy数组

时间:2018-07-11 13:33:19

标签: arrays python-2.7 numpy

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

1 个答案:

答案 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)