Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 维度与numpy广播不匹配_Python_Numpy_Array Broadcasting - Fatal编程技术网

Python 维度与numpy广播不匹配

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,

我在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, 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广播页面的例子。非常感谢。