如果你使用
np.r_
相反,它是有效的:
In [40]: np.cross(np.r_[pt1 - pp, 1], np.r_[pt2 - pp, 1])
Out[40]: array([-5.32030000e+02, -2.98623000e+03, -1.25246611e+06])
你的
pt1
和
pp
是(2,)数组。添加
1
对于它们,需要使用1d连接,
np.r_
用于“行”,而不是
columns
.
In [43]: np.r_[pt1 - pp, 1]
Out[43]: array([-123. , -397.5, 1. ])
In [44]: np.append(pt1 - pp, 1)
Out[44]: array([-123. , -397.5, 1. ])
In [45]: np.concatenate((pt1 - pp, [1]))
Out[45]: array([-123. , -397.5, 1. ])
concatenate
是基地行动。其他人调整了价格
生成可与(2,)形状数组连接的一维数组以生成(3,)。
Concatenate将其所有输入转换为数组(如果尚未转换):
np.concatenate((pt1 - pp, np.array([1])))
.
注意
np.c_
医生说这相当于
np.r_['-1,2,0', index expression]
初始字符串表达式有点复杂。关键是它尝试连接2d数组(而您的
是1d)。
就像
column_stack, joining
(2,1)
arrays to make a
(2,n)`数组。
In [48]: np.c_[pt1, pt2]
Out[48]:
array([[ 440. , -2546.23],
[ 59. , 591.03]])
In [50]: np.column_stack((pt1, pt2))
Out[50]:
array([[ 440. , -2546.23],
[ 59. , 591.03]])
numpy
c
努比
代码可以具有真正的标量(没有形状或大小的Python数字),也可以具有0或更多维度的数组。“向量”最自然地具有形状
(n,)
如果想要(3,1)数组(而不是(3,)形状),则需要使用某种“垂直”连接,将(2,1)数组与(1,1)数组连接起来:
In [51]: np.r_['0,2,0', pt1-pp, 1]
Out[51]:
array([[-123. ],
[-397.5],
[ 1. ]])
In [53]: np.vstack([(pt1-pp)[:,None], 1])
Out[53]:
array([[-123. ],
[-397.5],
[ 1. ]])
(但是
np.cross
需要(n,3)或(3,)数组,而不是(3,1)!)
In [58]: np.cross(np.r_['0,2,0', pt1-pp, 1], np.r_['0,2,0', pt2-pp, 1])
...
ValueError: incompatible dimensions for cross product
(dimension must be 2 or 3)
In [59]: np.cross(np.r_['0,2,0', pt1-pp, 1], np.r_['0,2,0', pt2-pp, 1], axis=0)
Out[59]:
array([[-5.32030000e+02],
[-2.98623000e+03],
[-1.25246611e+06]])
np.cross
如果需要操作尺寸标注的示例。在这个
axis=0
case将数组转置为(1,3),然后进行计算。