多種交叉產品更靈活

在我們的最後兩個例子中,numpy 假設 a[0,:] 是第一個向量,a[1,:] 是第二個,a[2,:] 是第三個。Numpy.cross 有一個可選的引數 axisa,它允許我們指定哪個軸定義向量。所以,

>>> a=np.array([[1,1,1],[0,1,0],[1,0,-1]])
>>> b=np.array([0,0,1])
>>> np.cross(a,b)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=0)
array([[ 0, -1,  0],
       [ 1, -1,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

axisa=1 結果和預設結果都是 (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b))。預設情況下,axisa 始終指示陣列的最後一個(最緩慢變化的)軸。axisa=0 的結果是 (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b))

類似的可選引數 axisbb 輸入執行相同的功能,如果它也是一個二維陣列。

引數 axisa 和 axisb 告訴 numpy 如何分配輸入資料。第三個引數,axisc 告訴 numpy 如果 ab 是多維的,如何分配輸出。使用與上面相同的輸入 ab,我們得到

>>> np.cross(a,b,1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,1,axisc=0)
array([[ 1,  1,  0],
       [-1,  0, -1],
       [ 0,  0,  0]])
>>> np.cross(a,b,1,axisc=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

所以 axisc=1 和預設的 axisc 都給出了相同的結果,也就是說,每個向量的元素在輸出陣列的最快移動索引中是連續的。axisc 預設是陣列的最後一個軸。axisc=0 在陣列的最慢變化維度上分佈每個向量的元素。

如果你希望 axisaaxisbaxisc 都具有相同的值,則無需設定所有三個引數。你可以將第四個引數 axis 設定為所需的單個值,其他三個引數將自動設定。如果函式呼叫中存在任何軸,則軸將覆蓋 axisa,axisb 或 axisc。