2016-03-02 181 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