展开numpy矩阵

时间:2015-01-18 16:51:52

标签: python numpy matrix

我试图以某种方式扩展numpy矩阵,通常看起来像:

import numpy as np

mtx = np.matrix([[['a','b','c'], ['x'], 3], [['d','e','f'], ['y'], 2],
    [['g','h','i'], ['z'], 1]])
mtx
# matrix([[['a', 'b', 'c'], ['x'], 3],
#         [['d', 'e', 'f'], ['y'], 2],
#         [['g', 'h', 'i'], ['z'], 1]], dtype=object)

最后一列包含结果矩阵的实例数,然后应如下所示:

# matrix([[['a', 'b', 'c'], ['x']],
#         [['a', 'b', 'c'], ['x']],
#         [['a', 'b', 'c'], ['x']],
#         [['d', 'e', 'f'], ['y']],
#         [['d', 'e', 'f'], ['y']],
#         [['g', 'h', 'i'], ['z']]], dtype=object)

所以,第一排三次,第二次两次等。

我想知道什么是最快和/或最优雅的蟒蛇方式?

很多tnx! PM

1 个答案:

答案 0 :(得分:2)

您可以使用np.repeat重复每行的前两列mtx[:,:2]第三列arr[:,2]的相应行所给出的次数:

>>> arr = np.asarray(mtx)
>>> np.repeat(arr[:,:2], arr[:,2].astype(int), axis=0)
array([[['a', 'b', 'c'], ['x']],
       [['a', 'b', 'c'], ['x']],
       [['a', 'b', 'c'], ['x']],
       [['d', 'e', 'f'], ['y']],
       [['d', 'e', 'f'], ['y']],
       [['g', 'h', 'i'], ['z']]], dtype=object)

首先需要将第三列转换为整数值(例如,使用astype(int))。我还发现有必要将mtx视为array,这样才能实现:您可以使用matrix轻松将其重新转换为np.matrix对象。