2016-03-02 123 views
1

我是一个IDL用户慢慢转换到与NumPy/SciPy的,并没有重现与numpy的操作,我做的极其经常在IDL,但不能管理:矢量矢量乘法来创建一个矩阵

IDL> a = [2., 4] 
IDL> b = [3., 5] 
IDL> print,a # b 
     6.00000  12.0000 
     10.0000  20.0000 

我甚至不确定这个操作的名字(英语不是我的主要语言)。也许很明显如何在numpy中做到这一点,但我找不到一个简单的方法。

谢谢。

- Arthur;

回答

4

这被称为两个向量的outer product。你可以使用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]] 

假设您的两个输入是numpy的阵列(而不是Python列表等),你也可以使用标准*运营商broadcasting

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

你也可以结合使用np.dot与广播:

e = np.dot(a[:, None], b[None, :]) 

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

f = np.multiply.outer(a, b) 

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

+0

非常感谢您的非常详细的答案! – Arthur