将numpy.array中的每个元素与numpy.array中的每个元素相乘

Nic*_*mer 6 python arrays numpy

给定两个numpy.array小号ab,

c = numpy.outer(a, b)
Run Code Online (Sandbox Code Playgroud)

返回一个二维数组c[i, j] == a[i] * b[j].现在,想象ak尺寸.

  • 哪个操作返回c维数k+1在哪里c[..., j] == a * b[j]

另外,让我们bl尺寸.

  • 哪个操作返回c维数k+1在哪里c[..., i1, i2, i3] == a * b[i1, i2, i3]

use*_*ica 5

outer方法 NumPy的ufuncs的对待多维输入你想要的方式,所以你可以做

numpy.multiply.outer(a, b)
Run Code Online (Sandbox Code Playgroud)

而不是使用numpy.outer.

这里提出的所有解决方案同样快速; 对于小阵列,multiply.outer有一点边缘

在此输入图像描述

生成图像的代码:

import numpy
import perfplot


def multiply_outer(data):
    a, b = data
    return numpy.multiply.outer(a, b)


def outer_reshape(data):
    a, b = data
    return numpy.outer(a, b).reshape((a.shape + b.shape))


def tensor_dot(data):
    a, b = data
    return numpy.tensordot(a, b, 0)


perfplot.save(
    "out.png",
    setup=lambda n: (numpy.random.rand(n, n), numpy.random.rand(n, n)),
    kernels=[multiply_outer, outer_reshape, tensor_dot],
    n_range=[2 ** k for k in range(7)],
    logx=True,
    logy=True,
)
Run Code Online (Sandbox Code Playgroud)