python - 如何取这两个不同形状数组的点积?
问题描述
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
我必须解决输入的多维性问题,但现在我已经走到了这一步,似乎让我走到这一步的方法现在让我失望了。
解决方案
输入数组(也称为向量或矩阵)必须具有相同的维度,而不是相同的长度。例如,以下将正常工作:
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
同样,您只需要确保您的值属于哪个轴。
推荐阅读
- c - 你如何修复调试断言失败?
- ios - Create Background-blurred RoundedRectangle in SwiftUI
- javascript - 从 querySelectorAll 输出中删除锚点
- python - Heroku 在同一个仓库中部署 React Flask 应用程序
- json - 是否可以将 select 用作 jq 列表中的元素?
- visual-studio-2017 - 构建 AutoMapper 源代码时出错
- sharepoint - 如何根据类别更改 Sharepoint 日历中事件的颜色
- python - 应用功能在 groupby 中没有按预期工作
- angular - Angular kendo-dropdownlist 值绑定 - 在选择时控制更改值
- reactjs - 在socket.io事件中反应useState不更新