Python 维度与numpy广播不匹配
我在numpy广播方面遇到了麻烦。当我尝试进行矩阵乘法时,我得到以下错误: 操作数无法与形状2,6 2,7一起广播 以下是无法运行的代码:Python 维度与numpy广播不匹配,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我在numpy广播方面遇到了麻烦。当我尝试进行矩阵乘法时,我得到以下错误: 操作数无法与形状2,6 2,7一起广播 以下是无法运行的代码: import numpy as np pointsX = np.array([0.5, 2, 3, 5.5, 8, 11]) pointsY = np.array([1, 2, -1.5, 0.5, 4, 5]) points = np.asarray([pointsX, pointsY]) linesX = np.array([0, 2, 4, 6,
import numpy as np
pointsX = np.array([0.5, 2, 3, 5.5, 8, 11])
pointsY = np.array([1, 2, -1.5, 0.5, 4, 5])
points = np.asarray([pointsX, pointsY])
linesX = np.array([0, 2, 4, 6, 10, 10, 0, 0])
linesY = np.array([0, 0, 0, 0, 0, 4, 4, 0])
lines = np.asarray([linesX, linesY])
x1 = linesX[0:-1]
y1 = linesY[0:-1]
L1 = np.asarray([x1, y1])
# calculate the relative length of the projection
# of each point onto each line
a = [np.diff(pointsX), np.diff(pointsY)]
b = points - L1
relativeProjectionLength = np.dot(a, b)/np.linalg.norm(b)
当我试图计算b时,问题就出现了。我希望它是一个[2x6x7]矩阵。如何执行此操作?我可以尝试使用循环,但实际数据将非常大~10000点~10000线,并且必须具有高性能
我读过关于扩展其中一个运算符点或L1的维数的内容,但以下代码也不能解决此问题:
b = points - L1[:,:,None]
b = points[:,:,None] - L1
非常感谢您的帮助。您需要将两者扩展到3D,保持第一个轴对齐,并沿最后一个轴为点引入新轴,第二个轴为L1,然后减去-
points[:,:,None] - L1[:,None,:] # or points[...,None] - L1[:,None]
这就解决了问题。现在我甚至更好地理解了官方numpy广播页面的例子。非常感谢。