【问题标题】:NumPy: better way to multiply a matrix by an array in-place?NumPy:将矩阵与原地数组相乘的更好方法?
【发布时间】:2010-12-01 07:58:34
【问题描述】:

我正在使用 NumPy arrays 做一些工作,但有时我需要将它们乘以数组。

现在,我正在做类似的事情:

rotation_matrix = np.matrix([ ... ])
for vector in vectors:
    rotated_vec_mat = vector.T * rotation_matrix
    vector[:] = np.array(rotated_vec_mat)[0]

但这很丑(而且很慢?)。

有没有更清洁的方法?

【问题讨论】:

    标签: numpy


    【解决方案1】:

    这样做可能更有意义:

    vector_arr = np.concatenate([vector[np.newaxis, :] for vector in vectors], axis=0)
    rotated_vector_arr = np.dot(vector_arr, rotation_matrix)
    

    那么rotated_vector_arr 的行就是你想要的。您可以将整个事物视为一个矩阵乘积,并通过 BLAS 库在 C/Fortran 中完成循环。

    不需要使用 matrix() 类来进行矩阵乘法,数组可以正常工作。 matrix() 重载了 * 运算符,但我发现它只会让事情变得混乱。

    【讨论】:

    • 嗯……我不明白。拨打np.concatenate 有什么作用?例如,如果vector = np.array([1,2,3])np.concatenate(vector[np.newaxis, :], axis=0) 只返回np.array([1,2,3])
    • 呃,我忘记了里面的列表理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2020-11-05
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多