我有一个形状为a.shape = (1,k*d)
的numpy数组,我想将其转换为每列中形状为b.shape = (k*d,k)
的numpy数组
b[i,j] = a[i] if j<i+1
b[i,j] = 0 if not
例如:
k = 3
d= 2
**********
A = |a| => B = |a 0 0|
|b| |b 0 0|
|c| |0 c 0|
|d| |0 d 0|
|e| |0 0 e|
|f| |0 0 f|
主要是没有循环!
我正在寻找的是一系列的numpy-matrix操作,可以达到预期的结果。
python大神给出的解决方案
这重现了您的示例。可以推广到其他k
和d
In [12]: a=np.arange(6)
In [13]: b=np.zeros((6,3))
In [14]: b[np.arange(6),np.arange(3).repeat(2)]=a
In [15]: b
Out[15]:
array([[ 0., 0., 0.],
[ 1., 0., 0.],
[ 0., 2., 0.],
[ 0., 3., 0.],
[ 0., 0., 4.],
[ 0., 0., 5.]])
关键是重复必要次数的列索引
In [16]: np.arange(3).repeat(2)
Out[16]: array([0, 0, 1, 1, 2, 2])