我有两个二维数组,我必须减go ,但不在相同的维度上,并且这些数组有不同的大小.如果我理解正确的话,有一种叫做广播的东西可以做我需要做的事情,我认为这篇文章(Link)展示了做这件事所需的一切,但我很难将它应用到我的问题上,而且,可能还有一种比我到目前为止所想的更直接的方法.
问题所在
这个问题的一般逻辑是这样的(如下所示,如果您在黑暗模式下,请原谅黑色字体):我有两个数组,目前都在相同的维度上,它们的行(m行和n行)大小不同.在它们当前的形状中,它们只在列中匹配,我想按列将一个数组的每个值减go 另一个数组的每个值.
我不知道哪些函数和操作可以并且应该在没有循环的情况下有效地完成这项工作.我目前有一个循环来完成这项工作,但我在这里处理的数据太大了,需要+12分钟才能完成.
我的 idea
我想我可以首先(1)将第一个数组转置到不同的维度上,然后(2)按照另一个数组的行数重复这一过程,以便在连接时得到一个m*n*500
的array.
然后,我对第二个数组执行相同的操作,只是针对不同的维度,并按之前另一个数组的行数重复该操作.然后,当连接时,它们应该具有相同的大小.
然后,最后,我将能够简单地将两个数组相减,而不会有任何维度冲突.
代码示例
在代码方面,这里真的没有什么可展示的.目前,我正在循环访问其中一个数组的行,然后在减法中使用它之前对其进行转置.
self.C = [] # list to hold the resulting arrays
for i in range(self.A.shape[0]): # loop over rows
A = pd.DataFrame(self.A.iloc[i, :]).T
C = pd.DataFrame(self.B.to_numpy() - A.to_numpy(), index=self.index)
self.C.append((self.A.index[i], C))
结果甚至不是3D数组,而是包含索引和2D数组的元组列表.
The Ask
如上所述,我不知道如何在NumPy中做到这一点,而且我很难将类似问题的答案应用到我的问题中.如果你能在这件事上帮忙,我将不胜感激.