【问题标题】:Most elegant to calculate many columns in numpy matrix?计算 numpy 矩阵中的许多列最优雅?
【发布时间】:2015-08-08 01:49:36
【问题描述】:

给定一个 numpy 矩阵,我希望创建一个由从起始矩阵的列计算的列组成的新矩阵。我可以用矢量运算来做到这一点,但它不是很优雅。例如,假设我想计算简单的增长率。​​p>

起始矩阵:

m = np.matrix(np.random.random_integers(1,100, size=(5,3)))
matrix([[ 96,  61, 100],
       [ 18,  82,  17],
       [ 59,  35,  58],
       [ 26,  97,  95],
       [ 25,  49,  32]])

所需的计算矩阵g:

g0 = np.empty((5, 1))
g0[:] = np.nan
g1 = (m[:, 1] - m[:, 0]) / m[:, 0]
g2 = (m[:, 2] - m[:, 1]) / m[:, 1]
g = np.hstack((g0, g1, g2))
matrix([[        nan, -0.36458333,  0.63934426],
        [        nan,  3.55555556, -0.79268293],
        [        nan, -0.40677966,  0.65714286],
        [        nan,  2.73076923, -0.02061856],
        [        nan,  0.96      , -0.34693878]])

我正在处理的真正的 m 矩阵包含许多列。

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    对于这个特定的问题,您可以一步完成计算:

    >>> (m[:,1:]- m[:,:-1])/m[:,:-1]
    array([[-0.36458333,  0.63934426],
           [ 3.55555556, -0.79268293],
           [-0.40677966,  0.65714286],
           [ 2.73076923, -0.02061856],
           [ 0.96      , -0.34693878]])
    

    >>> np.diff(m,1) / m[:,:-1]
    array([[-0.36458333,  0.63934426],
           [ 3.55555556, -0.79268293],
           [-0.40677966,  0.65714286],
           [ 2.73076923, -0.02061856],
           [ 0.96      , -0.34693878]])
    

    如果你坚持,你可以添加一列 nans。 (另外:请注意,我使用的是数组而不是矩阵,因为它们通常更方便,但上述方法也适用于矩阵。)

    即使该操作不能如此容易地向量化——假设列计算之间存在依赖关系——只要列数与行数相比较小,您也可以手动执行循环.循环遍历最小维度并对剩余维度进行矢量化计算是一种常见的折衷方案。

    【讨论】:

    • 这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2011-04-23
    • 2021-02-11
    • 2018-04-29
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多