Multiplying across in a numpy array

前端 未结 6 957
借酒劲吻你
借酒劲吻你 2020-11-28 03:41

I\'m trying to multiply each of the terms in a 2D array by the corresponding terms in a 1D array. This is very easy if I want to multiply every column by the 1D array, as sh

6条回答
  •  再見小時候
    2020-11-28 04:01

    I've compared the different options for speed and found that – much to my surprise – all options (except diag) are equally fast. I personally use

    A * b[:, None]
    

    (or (A.T * b).T) because it's short.


    Code to reproduce the plot:

    import numpy
    import perfplot
    
    
    def newaxis(data):
        A, b = data
        return A * b[:, numpy.newaxis]
    
    
    def none(data):
        A, b = data
        return A * b[:, None]
    
    
    def double_transpose(data):
        A, b = data
        return (A.T * b).T
    
    
    def double_transpose_contiguous(data):
        A, b = data
        return numpy.ascontiguousarray((A.T * b).T)
    
    
    def diag_dot(data):
        A, b = data
        return numpy.dot(numpy.diag(b), A)
    
    
    def einsum(data):
        A, b = data
        return numpy.einsum("ij,i->ij", A, b)
    
    
    perfplot.save(
        "p.png",
        setup=lambda n: (numpy.random.rand(n, n), numpy.random.rand(n)),
        kernels=[
            newaxis,
            none,
            double_transpose,
            double_transpose_contiguous,
            diag_dot,
            einsum,
        ],
        n_range=[2 ** k for k in range(13)],
        xlabel="len(A), len(b)",
    )
    

提交回复
热议问题