我是一个慢慢切换到 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 中做到这一点,但我找不到一种简单的方法。
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或*与广播。