C++ 特征张量广播语法

C++ 特征张量广播语法,c++,numpy,eigen,C++,Numpy,Eigen,我有以下numpy代码: # q.shape == (fxs, ks) # E.shape == (fxs, fxs) C = q[:, np.newaxis, :] * E[:, :, np.newaxis] * q[np.newaxis, :, :] # C.shape == (fxs, fxs, ks) 我正在Eigen中重新实现它 以下是我的想法: Eigen::Tensor<T, 3> C = q.reshape(Eigen::array<int

我有以下numpy代码:

# q.shape == (fxs, ks)
# E.shape == (fxs, fxs)
C = q[:, np.newaxis, :] * E[:, :, np.newaxis] * q[np.newaxis, :, :]
# C.shape == (fxs, fxs, ks)
我正在Eigen中重新实现它

以下是我的想法:

Eigen::Tensor<T, 3> C =
          q.reshape(Eigen::array<int, 3> {fxs, 1,   ks}).broadcast(Eigen::array<int, 3> {1, fxs, 1})
        * E.reshape(Eigen::array<int, 3> {fxs, fxs, 1 }).broadcast(Eigen::array<int, 3> {1, 1, ks})
        * q.reshape(Eigen::array<int, 3> {1,   fxs, ks}).broadcast(Eigen::array<int, 3> {fxs, 1, 1});
Eigen::张量C=
q、 重塑(特征::数组{fxs,1,ks})。广播(特征::数组{1,fxs,1})
*重塑(特征::数组{fxs,fxs,1})。广播(特征::数组{1,1,ks})
*重塑(本征::数组{1,fxs,ks})。广播(本征::数组{fxs,1,1});

但这似乎相当冗长。这是正确的翻译吗?

< p>你可以试试xtSc+C++模板库,它支持动态和静态尺寸

xtensor有一个与numpy非常相似的API,包括矢量化、广播和通用函数。这里有一份numpy到xtensor的备忘单:

最后,你可以通过点击

顶部的绑定徽章来尝试在C++的Juyter笔记本中进行直播。 xtensor还为科学计算的主要语言(R、Julia、Python)提供了绑定