python NumPy阵列之间的点积

k4emjkb1  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(85)

我有一个名为X的Pandas Series对象,它的维度为(100,)。X的每个元素被Map到浮点数的NumPy ndarray,具有形状(10,10)。我还有另一个名为Y的Pandas Series对象,它也有维度(100,)。Y的每个元素Map到一个Pandas DataFrame;每个DataFrame仅包含浮点数,大小为(10,10)。X和Y具有相同的索引-所有索引都是DatetimeIndex类型。
我想执行运算X·Y·X,其中“·”是点积。我想要一个解决方案,它可以工作,并且对NaN s的存在具有鲁棒性。我该怎么做?下面的尝试都失败了,我不知道为什么:

date_index = pd.date_range('2022-01-01', periods=100, freq='D')
labels = list('ABCDEFGHIJKLMNOPQRSTUVWXY')
X = pd.Series([np.random.rand(25, 25) for _ in range(100)], index=date_index)
Y = pd.Series([pd.DataFrame(np.random.rand(25, 25), index=labels[:25], columns=labels[:25]) for _ in range(100)], index=date_index)


# Attempt 1:
X.dot(Y).dot(X) ## ValueError: matrices are not aligned


# Attempt 2:
dot_products = lambda x, y: np.dot(np.dot(x, y), x)
X.apply(lambda x: dot_products(x, Y.loc[x])) # ValueError - can't index with multidimensional key
rks48beu

rks48beu1#

似乎最好的方法是广播X和Y来塑造(100,10,10):

xmat = np.array([x for x in X])
ymat = np.array([y for y in Y])

xyx = xmat @ ymat @ xmat

问题在于numpy.dot将X和Y视为一维向量,因此它会进行内部点积。我不确定它是执行元素乘法还是矩阵乘法,但它沿着日期维度求和,给出了(10,10)(或代码示例中的(25,25))结果。然后你试着把a(100,)和a(10,10)的乘积点上,它不知道如何解决。暴露X和Y的全维度解决了这个问题。

相关问题