多种交叉产品更灵活

在我们的最后两个例子中,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。