问题标签 [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 投票
0 回答
32 浏览

c++ - 如何将 xt::xfunction(来自 xtensor,在 c++ 中)直接评估为“字节数据”?

如果我保留了一段数据,我知道这是正确的长度:

如何将 xfunction 直接评估到数据中?

IE

...不创建中间容器值:xfunction 应直接评估为 *data,它可能位于堆或堆栈上。

0 投票
1 回答
94 浏览

python - xtensor:如何将向量写入数组

xtensor中的等价物或将向量写入数组的最优化方式是什么。

谢谢

0 投票
1 回答
158 浏览

python - xtensor 的 "operator/" 比 numpy 的 "/" 慢

我正在尝试将我以前用 python 编写的一些代码转移到 C++ 中,我目前正在测试 xtensor 以查看它是否可以比 numpy 更快地完成我需要的操作。

我的一个函数采用一个方阵 d 和一个标量 alpha,并执行元素运算alpha/(alpha+d)。背景:此函数用于测试哪个值alpha是“最佳”,因此它处于一个循环中,d始终相同,但alpha变化。

以下所有时间尺度都是运行该函数的 100 个实例的平均值。

在 numpy 中,执行此操作大约需要 0.27 秒,代码如下:

但是 xtensor 大约需要 0.36 秒,代码如下所示:

我也尝试过使用以下版本,std::vector但这是我不想长期使用的东西,即使它只花了 0.22 秒。

我注意到operator/in xtensor 使用“延迟广播”,有没有办法让它立即生效?

编辑:

在 Python 中,函数调用如下,并使用“time”包进行计时

在 C++ 中,我调用函数如下,并使用 chronos 计时:

如果您希望运行此代码,我建议使用xd2对称的 7084x7084 随机矩阵,对角线为零。

函数的输出,一个名为 的矩阵k,然后继续用于其他函数,但我仍然需要d保持不变,因为它稍后会被重用。

结束编辑

要运行我的 C++ 代码,我在终端中使用以下行:

提前致谢!

0 投票
1 回答
188 浏览

cmake - 无法在 Windows 上使用 xtensor-blas

免责声明:我是构建/make/packages/cmake 的菜鸟。
我的目标:xtensor-blas在 C++ 中使用库
我的环境: Win10 x64,CLion2021
我的问题:无法编译最简单的示例。关于项目依赖关系的某事。
我试过:
1)使用我可以谷歌搜索的每个教程手动下载和编译openBLAST - 总是停在不同的问题上。要么我没有“nmake”,要么由于某种原因构建失败,或者我得到“未定义的引用”等 - 我已经不知所措了几天。一步一步的演练将不胜感激。
2)我得到的最接近的是使用 anaconda conda install -c conda-forge openblas,然后将“包含”目录从xtl,复制粘贴到我的项目中xtensorxtensor-blas

Cmake 加载成功,并且OpenBLAS_FOUNDtrue. 但是当我编译我的 cpp 时,我得到error while loading shared libraries: openblas.dll: cannot open shared object file: No such file or directory Process finished with exit code 127
Note: OpenBLAS_INCLUDE_DIRSexpands to c:/Users/pruglo/anaconda3/envs/evn/Library/include/openblasand OpenBLAS_LIBRARYexpands toc:/Users/pruglo/anaconda3/envs/evn/Library/bin/openblas.dll


额外问题

  • 我需要 LAPACK 或其他东西xtensor-blas吗?
  • 我可以便携式构建我的项目,这样我就不需要为我开发的每台电脑安装所有东西吗?
0 投票
1 回答
42 浏览

c++ - xtensor-blas 计算不正确

我第一次尝试使用 xtensor-blas。我在链接到它时遇到了很多困难,但最后,我做到了,并尝试运行示例程序。但是,作为输出,我得到0了第一个和0, -inf第二个。

我正在使用Windows 10 x64, Clion 2021.1
Installed cmake 3.19.7, xtensor 0.23.4, xtensor-blas 0.19.0, openblas 0.3.13, lapack 3.6.1using anaconda
Compiled usingMicrosoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\HostX64\x64\cl.exe

0 投票
0 回答
56 浏览

c++ - 如何在 VSCode 调试器中整齐地显示新类

我正在使用 xtensor 数组,但我无法弄清楚如何在 VSCode 的调试器中很好地显示它们。这很烦人,因为我必须打印出数组才能看到内容。

有没有办法制作自定义函数,以便我可以看到 xtensor 数组的值,就像我在执行 std::cout << myArray;

谢谢

0 投票
1 回答
34 浏览

python - 将 python numpy 日志数组表达式转换为 cpp xtensor

我正在尝试将 NumPy/python 代码转换为 CPP/xtensor。我很难转换以下语句。

我将如何在 xtensor 中写这个?

0 投票
1 回答
150 浏览

parallel-processing - 在矩阵向量乘法中使用 OpenMP“for simd”?

我目前正在尝试通过与 组合使我的矩阵向量乘法函数与 BLAS 进行比较#pragma omp for#pragma omp simd但与仅使用 for 构造相比,它没有得到任何加速改进。如何使用 OpenMP 的 SIMD 构造正确矢量化内部循环?

0 投票
1 回答
919 浏览

numpy - Numpy vs Eigen vs Xtensor 线性代数基准奇数

我最近试图比较不同的 python 和 C++ 矩阵库的线性代数性能,以便了解在即将到来的项目中使用哪些。虽然有多种类型的线性代数运算,但我选择主要关注矩阵求逆,因为它似乎给出了奇怪的结果。我在下面编写了以下代码进行比较,但我认为我一定做错了什么。

C++ 代码

这是编译的:

对于 OpenBLAS,以及

对于 cBLAS。
g++ 版本 9.3.0。

对于 Python 3:

我将专注于在我的计算机上运行合理时间的最大十年:1000x1000。我知道只有 2 次运行会引入一些差异,但我已经运行了更多次,结果大致与以下相同:

  • 特征 3.3.9:196.804 毫秒
  • Xtensor/Xtensor-blas w/ OpenBlas:378.156 毫秒
  • Numpy 1.17.4:172.582 毫秒

这是一个合理的预期结果吗?为什么 C++ 库比 Numpy 慢?所有 3 个软件包都使用某种 Lapack/BLAS 后端,但 3 个之间存在显着差异。特别是,Xtensor 将使用 OpenBlas 的线程将我的 CPU 固定到 100% 的使用率,但仍然设法获得更差的性能。

我想知道 C++ 库是否实际上正在执行矩阵的逆/伪逆,以及这是否是导致这些结果的原因。在 C++ 测试代码的注释部分中,我注意到当我对 Eigen 和 Xtensor 的结果进行健全检查时,矩阵与其逆矩阵之间的矩阵乘积甚至不接近单位矩阵。我尝试使用较小的矩阵(10x10),认为这可能是一个精度错误,但问题仍然存在。在另一个测试中,我测试秩,这些矩阵是满秩的。为了确保我没有发疯,我在这两种情况下都尝试使用 inv() 而不是 pinv(),结果是一样的。我是在这个线性代数基准测试中使用了错误的函数,还是这个 Numpy 在 2 个功能失调的低级库上扭曲了刀?

编辑: 谢谢大家对这个问题的兴趣。我想我已经弄清楚了这个问题。我怀疑 Eigen 和 Xtensor 有惰性求值,这实际上导致下游错误,并输出随机矩阵而不是逆矩阵。我能够通过代码中的以下替换来纠正奇怪的数字反转失败:

但是,时间安排并没有太大变化:

  • 特征 3.3.9:201.386 毫秒
  • Xtensor/Xtensor-blas w/ OpenBlas:337.299 毫秒。
  • Numpy 1.17.4:(从之前)172.582 毫秒

实际上,有点奇怪的是,添加 -O3 和 -ffast-math 实际上会稍微减慢代码速度。-march=native 在我尝试时对我来说性能提升最大。此外,对于这些问题,OpenBLAS 比 CBLAS 快 2-3 倍。

0 投票
1 回答
83 浏览

c++ - 如何读取从调用 xt::load_csv() 返回的 xtensor 'xexpression' 对象的元素?

我的代码是:

当我在 IDE 中检查xt::xexpression对象data时,它的尺寸和填充正确,但我找不到在代码中读取其元素的方法。

在仔细阅读xtensor文档之后,我并不明智......也许指向xtensor的良好介绍的指针可能会回答这个问题。