向量-向量乘法以创建矩阵

Art*_*hur 2 python numpy

我是一个慢慢切换到 numpy/scipy 的 IDL 用户,我在 IDL 中经常做一个操作,但无法用 numpy 重现:

IDL> a = [2., 4]
IDL> b = [3., 5]
IDL> print,a # b
      6.00000      12.0000
      10.0000      20.0000
Run Code Online (Sandbox Code Playgroud)

我什至不确定这个操作的名称。也许很明显如何在 numpy 中做到这一点,但我找不到一种简单的方法。

ali*_*i_m 5

这被称为两个向量的外积。你可以使用np.outer

import numpy as np

a = np.array([2, 4])
b = np.array([3, 5])
c = np.outer(a, b)

print(c)
# [[ 6 10]
#  [12 20]]
Run Code Online (Sandbox Code Playgroud)

假设您的两个输入都是 numpy 数组(而不是 Python 列表等),您还可以将标准*运算符与广播一起使用

# you could also replace np.newaxis with None for brevity (see below)
d = a[:, np.newaxis] * b[np.newaxis, :]
Run Code Online (Sandbox Code Playgroud)

您还可以np.dot与广播结合使用:

e = np.dot(a[:, None], b[None, :])
Run Code Online (Sandbox Code Playgroud)

另一个鲜为人知的选项是使用ufunc的.outer方法np.multiply

f = np.multiply.outer(a, b)
Run Code Online (Sandbox Code Playgroud)

我个人要么使用np.outer*与广播。