首页 > 解决方案 > 如何将参数传递给python函数错误

问题描述

我有这段代码:

   points = np.array([[207.0,489.0], [500.0,58.0], [84.0,17.0],[197.0,262.0]])
    #read data from the csv file 
    x = df["XC"]
    y = df["YC"]
    # make the x,y a point type 
    pointP = np.array([x,y])
    #print(pointP)
    rW,rV,rU = calcRatios(points,pointP,ratioU,ratioV,ratioW)

这是 calcRatios 函数

def calcRatios(points,centreP,ratioU,ratioV,ratioW):
    v0 = points[1] - points[0]
    v1 = points[2] - points[0]
    v2 = centreP - points[0]
    #dot product of the vects
    d00 = np.dot(v0, v0)
    d01 = np.dot(v0, v1)
    d11 = np.dot(v1, v1)
    d20 = np.dot(v2, v0)
    d21 = np.dot(v2, v1)
    #calc denom
    denom = d00 * d11 - d01 * d01
    #barycentric ratios of v,w,u
    ratioV = (d11 * d20 - d01 * d21) / denom
    ratioW = (d00 * d21 - d01 * d20) / denom
    ratioU = 1.0 - ratioV - ratioW
    return ratioV,ratioW,ratioU

数据帧中的数据存储如下:

       Index      XC      YC    R    G    B
           1       0       0  227  227  227
           2       1       0  237  237  237
           3       2       0   0     0    0
           4       3       0  232  232  232
           5       4       0  233  233  233
...        ...     ...     ...  ...  ...  ...

但是,现在我传递给函数的 centerP 点似乎存在问题,我不知道为什么。

我得到的错误说:ValueError: operands could not be broadcast together with shapes (2,28686) (2,)对于这一行 v2 = centreP - points[0]

有人能告诉我为什么会发生这种情况以及应该如何解决吗?

谢谢!

标签: pythonpython-3.xpandas

解决方案


centreP是两个长数组的数组:[[0, 1, 2...], [0,0,0...]], whilepoints[0]是长度为 2 的单个数组, [207.0,489.0]。numpy 的广播规则无法处理这两个形状的减法。但是,如果您转置centreP[[0,0], [1,0], [2,0]...]它将通过points[0]从每一行中减去来处理此问题:

 v2 = centreP.T - points[0]

更好的是,通过df[[XC, YC]]而不是pointP- 它将被强制转换为正确形状的 numpy 数组。

rW,rV,rU = calcRatios(points, df[["XC","YC"]]) # no need to transpose

推荐阅读