问题标签 [xtensor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
452 浏览

c++ - 如何在 Fastor 或 Xtensor 中编写快速的 c++ 惰性评估代码?

我是 C++ 的新手,听说eigenblazeFastorXtensor 等具有惰性求值和 simd 的库对于矢量化操作来说很快。

我通过以下函数测量了一些进行基本数值运算的时间:

(快速)

(Xtensor)

编译标志:

(快速)

(Xtensor)

编译器:Apple LLVM version 10.0.0 (clang-1000.11.45.5)

处理器:2.6 GHz Intel Core i5

为了比较,我还测量了用 python 编写的函数,它优化了numba.vectorize

结果(以 usec 为单位)表明

我做错什么了吗?Fastor 和 Xtensor 怎么会慢 50 倍。

如何通过使用auto关键字来使用表达式模板和惰性求值?

谢谢你的帮助!



@Jérôme Richard 感谢您的帮助!

有趣的是,Fastor 和 Xtensor 无法忽略冗余的 for 循环。无论如何,我对每个数字运算进行了更公平的比较。

SIMD 的因子 2 也很有意义。

(快速)

(Xtensor)

(努巴)

结果显示

像这样的格式135/135表示结果。without/with-ffast-math

事实证明

  1. Fastor/Xtensor 在 , , 中的表现非常糟糕expsincos令人惊讶。
  2. +=Fastor/Xtensor 在, *=,中的缩放比 Numba 差/=

这是 Fastor/Xtensor 的本质吗?


我将表达式修改为

它给了

发生了什么?

  1. 为什么 Fastor/Xtensor 无法100*exp(u)通过惰性评估将 for 循环表达为天真的?
  2. 为什么随着张量大小的增加 Fastor/Xtensor 变得更快?
0 投票
1 回答
71 浏览

c++ - Xtensor 中的惰性求值

在使用xtensor的以下函数中,我期望编译器在将表达式分配给精确张量时表达计算图auto z = 3.0 * u + 100 * xt::cos(u);并评估结果。xt::xtensor_fixed<T, xt::xshape<nn>> out = z;

但是,我得到了一个错误

我用auto错了吗?如何在 for 循环中使用惰性求值?

感谢您的帮助!

0 投票
1 回答
165 浏览

c++ - xtensor xt::where 索引相关函数的问题

在这里,我试图用 C++ 中的xtensor库做一个非常基本的操作。我有 xarray a,并且使用与索引相关的函数 xt::where,我想获取条件为 True 的索引数组(注意,还有另一个 xt::where 函数,但它是一个运算符函数,我不想要它)。当我尝试用这一行编译它时,我得到了很多错误:

奇怪的是,当我尝试使用另一个 xt::where 函数(运算符函数)时,它可以工作、编译和运行。我显然错过了一些东西;我正在搜索,但我无法通过,请帮助我!谢谢你。

这是代码:

编辑:错误。

EDIT2:在没有 xtensor 的情况下解决。也许它会慢一些。

0 投票
0 回答
76 浏览

python - 使用 openmp 时,xtensor-python-cookiecutter 无法按预期成功构建我的模块

在 xtensor-python 和 xtensor-python-cookiecutter 中使用 openmp 时遇到问题。

执行后python setup.py build,我遇到错误时import myLibundefined symbol: omp_get_thread_num

下面是我的日志python setup.py build

检查最后一条命令:

似乎-fopenmp缺少了。在我手动运行它之后-fopenmp,即

什么都好。

我在 中添加了标志-fopenmpsetup.py但我不知道为什么它不能按预期工作

感谢您的阅读。

下面是我的全部setup.py

再次感谢。

0 投票
1 回答
102 浏览

c++ - 熊猫`groupby`的xtensor等价物是什么?

与 pandas 等效的 C++ xtensor 库是groupby什么?或者,如何使用 C++ xtensor 库轻松地对数据框进行分组?

0 投票
0 回答
194 浏览

c++ - 如何在多维 R 数组上加速 Log-sum-exp 函数?

我正在加快我在 R 中编写的程序的速度。代码涉及在多维数组上重复计算 LogSumExp,即计算 s_lnj = exp(u_lnj) / (1 + sum_k exp(u_lnk))。我试图提高速度的代码的基本 R 版本如下:

我尝试使用 xtensor 和 Rcpp 来加快速度,但遇到了几个问题。我写的Rcpp代码如下

Rcpp 实现似乎确实产生了与基本 R 代码相同的结果,但是每当输入数组的维度增加时,它似乎都会遇到问题。如果我运行,我的 R 会话将失败

但是例如,对于 L、n、J = 10、10、20,代码运行良好。此外,log_sum_exp 的 C++ 实现似乎并没有比基础 R 版本好太多。

编辑:我无法弄清楚我使用 xtensor 的方式有什么问题。但我确实使用以下 RcppArmadillo 代码加快了速度。这个版本的缺点是它可能不像依赖 Log Sum Exp 的基本 R 函数那样鲁棒性溢出。

0 投票
0 回答
263 浏览

python - XTensor (C++) 的 NumPy einsum 等效项

一开始,这是我在这里的第一个问题,我会尽力描述,
如果我做错了,请注意。

最近,我一直在用 C++ 重写一些 numpy 的东西。
可悲的是,需要这样做的情况。我真的无能为力。
(我可以从 C++ 调用一些 python 命令,但不是全部。)

自然,我从 XTensor 开始,因为它声称 C++ 相当于 numpy。
可悲的是,我一直坚持numpy.einsum
我在互联网上搜索并找到了一些相关的东西,它是如何工作的(至少有点)。

然后我的问题就来了。首先,我需要实现没有->.
Numpy 文档告诉我它有点“隐式模式”(当时也有省略号)。
(稍后描述)我发现了一些 einsum 配置的实现/等价物,
比如'i,ij'和 else。
我想坚持使用 XTensor,因为我已经做了很多事情。
这是我需要用 C++ 在 XTensor 中重新实现的部分代码:

我希望有人能给我解释一下,它指的是什么。
如果你能给我一些想法,我该如何实现它,那将是最好的。
我可以使用任何东西,我想……实际上最终会是什么xt::xarray
在最坏的情况下,我正在考虑从 C++ 调用 python 代码,甚至使用 Google protobuf。

如果您有任何想法或有用的链接,请分享!
(与我发布的代码有关,而不是numpy.einsum一般而言)

0 投票
0 回答
127 浏览

python - 为什么numpy零初始化数组给出零以外的数字?

我正在尝试为我的硕士论文在 C++ xtensor 库中重新实现 numpy 代码。但我无法理解为什么 numpy 零初始化数组给出 number(10,20,43,28,....)。请参阅下面的代码。

这是代码:

你可以在上面代码的注释部分看到,

  1. 我不明白,为什么 number_buffer 给出的实际值不是 0 且大于零?

我正在使用第三方库在 C++ 中实现 numpy 功能。

谁能解释一下代码的行为?

零初始化数组如何给出大于 0 的实际值(这意味着存储在每个体素中的点数)?

使用 xtensor 在 C++ 中实现的代码可以正常工作,直到满足以下条件:

在 C++ 中,number 将始终为零,因为 number_buffer 在 numpy 和 C++ 中都初始化为零。所以 C++ 代码给出 0,但 numpy 代码给出的某些索引不是零(比如大于零的值,这意味着存储在每个体素中的点数)。

我很高兴提供我需要的更多信息。请帮我解决这个问题。

提前致谢

0 投票
1 回答
183 浏览

android - Android Studio中c ++中的矩阵乘法

我正在尝试在 Android Studio 中进行矩阵乘法,并希望使用 c++ 来提高速度。我找到了库 xtensor 并认为它会很有用,但我无法开始工作。我尝试将头文件放入 cpp 文件夹,但随后他们无法访问基本库依赖项,我已经研究了几个小时,但我无法确切知道在 CMakeLists.txt 中要写什么以及库是如何写的实际上是要安装的。如果这真的很明显,我很抱歉,但我真的无法理解它。

如何在 android studio 中安装 xtensor 库,或者有其他方法吗?我想避免使用 for 循环进行计算,但如果没有其他可能性,我想我必须......

0 投票
1 回答
63 浏览

c++ - 如何创建一个采用 xexpression 或容器的函数?

我对 xtensor 类型有点迷茫。我想创建一个可以接受表达式或容器的函数。我怎么做?

IE:

...就像我说的那样,如果 multbytwo 函数的参数是评估容器或“未评估”xexpression,我希望它能够正常工作。甚至可能吗?如果参数是一个表达式,我想将没有评估的表达式传递给一个临时的。我的理解是,如果 WHATEVER 是xtensor那么它将评估表达式,而我不希望那样。