gpt4 book ai didi

c++ - 我如何在 Eigen 中做张量的外积?

转载 作者:行者123 更新时间:2023-11-30 03:36:08 25 4
gpt4 key购买 nike

在 eigen 中,可以很容易地使用以下方法进行张量收缩:

Tensor<double, 1> tensor1;
Tensor<double, 2> tensor2;

// fill with data so that
// tensor1 is of dimensions [10] and tensor2 of dimensions [5,10]

std::array<Eigen::IndexPair<int>, 1> product_dims1 = { IndexPair<int>(1, 0) };

auto tensor = tensor2.contract(tensor1, product_dims1);

// now tensor is of dimensions [5]

我正在寻找一种与收缩相反的方法,这意味着它需要两个张量 A 和 B,比如尺寸为 5 x 10 和 3 x 2,并定义一个尺寸为 5 x 10 x 3 x 2 的新张量 C这样

  C_ijkl = A_ij * B_kl

如有必要,我可以轻松编写这样的方法,但我觉得如果我使用 native 特征方法,它会更优化。我还希望能够使用 GPU 支持,如果您使用 native 方法,这对 eigen 来说非常容易。

谢谢。

最佳答案

解决方案可能太简单了:您必须没有索引

Eigen::array<Eigen::IndexPair<long>,0> empty_index_list = {};
Tensor<double, 2> A_ij(4, 4);
Tensor<double, 2> B_kl(4, 4);
Tensor<double, 4> C_ijkl = A_ij.contract(B_kl, empty_index_list);

关于c++ - 我如何在 Eigen 中做张量的外积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40829887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com