更改无循环的numpy数组的格式 - python

我有一个形状为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大神给出的解决方案

这重现了您的示例。可以推广到其他kd

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])