我发现为了使用点积,我经常需要将(5,)重塑成(5,1)。我不能只使用带有矢量形状(5,)的点积?
答案 0 :(得分:4)
要使用点积,您需要矩阵(用2D数组表示)。具有维度(5,)的数组是5个项目的平面数组(1D数组),其中(5,1)是具有1列和5行的矩阵。
>>> import numpy as np
>>> np.zeros((5,))
array([ 0., 0., 0., 0., 0.]) # single flat array
>>> np.zeros((1,5))
array([[ 0., 0., 0., 0., 0.]]) # array with-in array
>>> np.zeros((5,1))
array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])
>>>
答案 1 :(得分:3)
这是因为当您使用arr = np.ones((5))
创建数组时,它会为您提供包含5个元素的一维数组,另一方面,当您使用arr = np.ones((5, 1))
创建数组时,它会创建一个包含>>> import numpy as np
>>> a = np.ones((5, 1))
>>> a
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])
>>> a = np.ones((5))
>>> a
array([ 1., 1., 1., 1., 1.])
的数组的数组。 5行1列。以下示例将使您更清楚:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Imgproc.bilateralFilter(inputFrame.gray(),co,9, 9, 7);
Imgproc.medianBlur(inputFrame.gray(),gray, 7);
Imgproc.adaptiveThreshold(gray,gray, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,9,2);
Core.bitwise_and(co,gray,mOutputFrame);//ADDS THE BOTH IMAGES
return mOutputFrame;
}