多种交叉产品更灵活
在我们的最后两个例子中,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。