我试图通过平方和来进行最小化,但我正在进行的全局最小化具有不同大小的数组。我试图使用所有数据集进行最小化,即使它们的大小不同。
即
data_1=[[1,2],[2,3]]
data_2=[[3,4],[5,6],[6,7]]
model_1=[[1,1],[2,2]]
model_2=[[3,3],[5,5],[6,6]]
现在数据/模型的大小相同,所以这样做
sum((data_1-model_1)**2)
问题是我试图把所有的数据和所有的模型结合起来,以实现全局拟合。
total_data=[[[1,2],[2,3]],[[3,4],[5,6],[6,7]]]
total_model=[[[1,1],[2,2]],[[3,3],[5,5],[6,6]]]
现在你可以像这样创建列表的列表,但是我想创建一个numpy数组,这样我就可以进行数学运算,比如
np.sum((total_data-total_model)**2)
您可以创建numpy对象,但它们被处理为列表,因此数学numpy操作不适用于列表对象。
任何关于如何做到这一点的建议都将非常感谢!我只是试图整合我的数据并进行全局拟合,而不是制作多个嵌套循环并单独处理每个循环。
2条答案
按热度按时间htzpubme1#
不同大小的矩阵的减法是不同的操作,这是没有办法的。你可以使用各种numpy和Python魔法来使它看起来像一个操作,但在一天结束时,类似于
将是最明显和清晰的。
如果这成为性能瓶颈,您可以使用numba。
3zwjbxry2#
我们可以对对象dtype数组做一些数学运算,但不是所有的运算。而且,当它工作时,数学运算是以列表理解的速度完成的,而不是以数字dtype的编译速度完成的。
制作阵列列表:
然后直接将你的计算应用于这些对:
现在尝试从这些列表中创建对象dtype数组:
请注意这与从列表列表中创建数组的不同之处:
像+/* 这样的运算符通常与对象dtype列表一起使用,前提是元素也实现了它们:
列表数组不能做到这一点,因为列表不能实现大多数运算符。
我们不能将
sum
函数应用于该数组:对于像
log
或sin
这样的函数也是如此。但是我们可以求助于显式的列表解析: