Python 重塑锯齿状数组并用零填充 我想完成的任务是:考虑一个一维数组 a 和一个索引数组>代码>部件长度>代码> n。例如: a = np.arange(9) parts = np.array([4, 6, 9]) # a = array([0, 1, 2, 3, 4, 5, 6, 7, 8])

Python 重塑锯齿状数组并用零填充 我想完成的任务是:考虑一个一维数组 a 和一个索引数组>代码>部件长度>代码> n。例如: a = np.arange(9) parts = np.array([4, 6, 9]) # a = array([0, 1, 2, 3, 4, 5, 6, 7, 8]),python,arrays,numpy,indexing,slice,Python,Arrays,Numpy,Indexing,Slice,我想将a转换成一个二维形状数组(N,),将a的值插入到二维数组每行indx中的每个索引中,用零填充该行的剩余部分,如下所示: array([[0, 1, 2, 3], [4, 5, 0, 0], [6, 7, 8, 0]) 我不希望使用循环。我无法理解这一点,非常感谢您的帮助。这里有一个带有布尔索引的- def jagged_to_regular(a, parts): lens = np.ediff1d(parts,to_begin=parts[0])

我想将
a
转换成一个二维形状数组
(N,)
,将
a
的值插入到二维数组每行
indx
中的每个索引中,用零填充该行的剩余部分,如下所示:

array([[0, 1, 2, 3],
       [4, 5, 0, 0],
       [6, 7, 8, 0])

我不希望使用循环。我无法理解这一点,非常感谢您的帮助。

这里有一个带有
布尔索引的
-

def jagged_to_regular(a, parts):
    lens = np.ediff1d(parts,to_begin=parts[0])
    mask = lens[:,None]>np.arange(lens.max())
    out = np.zeros(mask.shape, dtype=a.dtype)
    out[mask] = a
    return out
样本运行-

In [46]: a = np.arange(9)
    ...: parts = np.array([4, 6, 9])

In [47]: jagged_to_regular(a, parts)
Out[47]: 
array([[0, 1, 2, 3],
       [4, 5, 0, 0],
       [6, 7, 8, 0]])