多種交叉產品更靈活
在我們的最後兩個例子中,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))
。
類似的可選引數 axisb
對 b
輸入執行相同的功能,如果它也是一個二維陣列。
引數 axisa 和 axisb 告訴 numpy 如何分配輸入資料。第三個引數,axisc 告訴 numpy 如果 a
或 b
是多維的,如何分配輸出。使用與上面相同的輸入 a
和 b
,我們得到
>>> 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
在陣列的最慢變化維度上分佈每個向量的元素。
如果你希望 axisa
,axisb
和 axisc
都具有相同的值,則無需設定所有三個引數。你可以將第四個引數 axis
設定為所需的單個值,其他三個引數將自動設定。如果函式呼叫中存在任何軸,則軸將覆蓋 axisa,axisb 或 axisc。