首页 > 解决方案 > 如何取这两个不同形状数组的点积?

问题描述

 xT_dot_x_dot_xT = [[ 0.00000000e+00 -5.06371260e-04 -1.97580457e-03]
 [ 0.00000000e+00 -7.54147768e-04  1.70472264e-03]
 [ 0.00000000e+00  4.02927399e-05  3.20196152e-04]
 [ 0.00000000e+00  8.85248184e-04 -2.95877457e-04]
 [ 0.00000000e+00  2.01046467e-04  2.06828117e-05]
 [ 0.00000000e+00  5.04493713e-04  5.10215759e-04]
 [ 0.00000000e+00  8.46385956e-05 -8.65459442e-05]
 [ 0.00000000e+00  6.81161880e-04 -5.64813614e-04]
 [ 0.00000000e+00 -6.24537468e-04  3.47018242e-04]
 [ 0.00000000e+00 -3.38315964e-04  2.02894211e-04]] 
 y = [[208500]
 [181500]
 [223500]
 [140000]
 [250000]
 [143000]
 [307000]
 [200000]
 [129900]
 [118000]]

这些数据大致以这种方式得出:

print(x, y)
[[1710 2003]
 [1262 1976]
 [1786 2001]
 [1717 1915]
 [2198 2000]
 [1362 1993]
 [1694 2004]
 [2090 1973]
 [1774 1931]
 [1077 1939]] [[208500]
   [181500]
   [223500]
   [140000]
   [250000]
   [143000]
   [307000]
   [200000]
   [129900]
   [118000]]
zeros = np.zeros((len(x), 1))
x = np.append(zeros, x, axis=1)

#print("values for process\n", x,y)

xT = np.transpose(np.linalg.inv(np.tensordot(x.T, x, axes=([0],[-1]))))
xx = np.tensordot(xT, x.T, axes=([0],[-1]))
print("intermediate\n", xx, y)
# wls = np.tensordot(xx, y, axes=([-1],[0])) # -- failing line

我必须解决输入的多维性问题,但现在我已经走到了这一步,似乎让我走到这一步的方法现在让我失望了。

标签: pythonnumpy

解决方案


输入数组(也称为向量或矩阵)必须具有相同的维度,而不是相同的长度。例如,以下将正常工作:

xa = np.array([[2,3,4,5], [1,2,4,3], [2,3,2]])
ya = np.array([[1], [2], [9]])
np.dot(xa, ya)

您可能想检查为什么需要点积 - 根据您解释数据的方式,您可能需要将二维添加到填充有一个的数组“y”中。假设这些值是沿 y 轴的,它可能会像这样填充:

 y = [[1, 208500, 1],
 [1, 181500, 1]] #and so on for the remaining rows

同样,您只需要确保您的值属于哪个轴。


推荐阅读