问题标签 [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.
c++ - 如何将 xt::xfunction(来自 xtensor,在 c++ 中)直接评估为“字节数据”?
如果我保留了一段数据,我知道这是正确的长度:
如何将 xfunction 直接评估到数据中?
IE
...不创建中间容器值:xfunction 应直接评估为 *data,它可能位于堆或堆栈上。
python - xtensor:如何将向量写入数组
xtensor中的等价物或将向量写入数组的最优化方式是什么。
谢谢
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++ 代码,我在终端中使用以下行:
提前致谢!
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
,复制粘贴到我的项目中xtensor
。xtensor-blas
Cmake 加载成功,并且OpenBLAS_FOUND
是true
. 但是当我编译我的 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_DIRS
expands to c:/Users/pruglo/anaconda3/envs/evn/Library/include/openblas
and OpenBLAS_LIBRARY
expands toc:/Users/pruglo/anaconda3/envs/evn/Library/bin/openblas.dll
额外问题:
- 我需要 LAPACK 或其他东西
xtensor-blas
吗? - 我可以便携式构建我的项目,这样我就不需要为我开发的每台电脑安装所有东西吗?
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.1
using anaconda
Compiled usingMicrosoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\HostX64\x64\cl.exe
c++ - 如何在 VSCode 调试器中整齐地显示新类
我正在使用 xtensor 数组,但我无法弄清楚如何在 VSCode 的调试器中很好地显示它们。这很烦人,因为我必须打印出数组才能看到内容。
有没有办法制作自定义函数,以便我可以看到 xtensor 数组的值,就像我在执行 std::cout << myArray;
谢谢
python - 将 python numpy 日志数组表达式转换为 cpp xtensor
我正在尝试将 NumPy/python 代码转换为 CPP/xtensor。我很难转换以下语句。
我将如何在 xtensor 中写这个?
parallel-processing - 在矩阵向量乘法中使用 OpenMP“for simd”?
我目前正在尝试通过与 组合使我的矩阵向量乘法函数与 BLAS 进行比较#pragma omp for
,#pragma omp simd
但与仅使用 for 构造相比,它没有得到任何加速改进。如何使用 OpenMP 的 SIMD 构造正确矢量化内部循环?
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 倍。
c++ - 如何读取从调用 xt::load_csv() 返回的 xtensor 'xexpression' 对象的元素?
我的代码是:
当我在 IDE 中检查xt::xexpression
对象data
时,它的尺寸和填充正确,但我找不到在代码中读取其元素的方法。
在仔细阅读xtensor文档之后,我并不明智......也许指向xtensor的良好介绍的指针可能会回答这个问题。