【问题标题】:Expand numpy matrix展开 numpy 矩阵
【发布时间】:2015-03-16 17:29:24
【问题描述】:

我正在尝试以某种方式扩展 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)

所以,第一行 3 次,第二行 2 次,以此类推。

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

很多 tnx!下午

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    您可以使用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 才能正常工作:您可以使用np.matrix 轻松将其再次转换为matrix 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多