标签: xtensor

为使用 conda 安装的仅标头库设置包含路径

最近有人建议我作为包管理器查看 conda。不幸的是,我没有成功地找到如何让我的编译器找到与 conda 安装的仅标头库?理想情况下,我希望根本不必手动指定编译器的路径。

(上下文是我来自 macOS 上的自制软件,它会在正确的位置创建符号链接。显然这是 conda 避免的。但是,如果有一种简单的方法来编译简单的示例就好了!)


例子

例如,如果我的代码是下面的代码。注意:这个问题是通用的,与特定的包无关,我也不想再次手动指定我的特定虚拟环境。

#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>

int main()
{
  xt::xarray<double> a
    {{1.0, 2.0, 3.0},
     {2.0, 5.0, 7.0},
     {2.0, 5.0, 7.0}};

  std::cout << a;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用“安装”了该库

conda create --name example
source activate example
conda install -c conda-forge xtensor-python
Run Code Online (Sandbox Code Playgroud)

现在我想编译

clang++ -std=c++14 test.cpp
Run Code Online (Sandbox Code Playgroud)

请注意,我知道这是有效的:

clang++ -std=c++14 -I~/miniconda3/envs/example/include test.cpp
Run Code Online (Sandbox Code Playgroud)

但我认为这不是我们想要的,因为:

  • 该路径包含环境 ( example)。
  • 它取决于系统。

c++ include-path conda xtensor

7
推荐指数
1
解决办法
5838
查看次数

如何将 xarray 转换为 std::vector?

该文档非常清楚地说明了如何使 a 适应std::vector张量对象。 https://xtensor.readthedocs.io/en/latest/adaptor.html

std::vector<double> v = {1., 2., 3., 4., 5., 6. };
std::vector<std::size_t> shape = { 2, 3 };
auto a1 = xt::adapt(v, shape);
Run Code Online (Sandbox Code Playgroud)

但你怎么能反过来呢?

xt::xarray<double> a2 = { { 1., 2., 3.} };
std::vector<double> a2vector = ?;
Run Code Online (Sandbox Code Playgroud)

stdvector xtensor

7
推荐指数
1
解决办法
2523
查看次数

如何使用指针用数据填充 xtensor 数组

xtensor我正在尝试从库中的 blob 数据创建一个数组caffe。使用例如 bymutable_cpu_data()中的函数返回指向数据的指针。这可能吗?如果是,请举个例子。我找到了使用 OpenCV 的示例,但很相似,这使得对矩阵等数据的操作变得更加容易。caffefloat* data = output->mutable_cpu_data();xtensorMatxtensornumpy

c++ caffe xtensor

5
推荐指数
1
解决办法
1919
查看次数

Numpy vs Eigen vs Xtensor 线性代数基准怪异

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

C++代码

    #include <iostream>
    #include "eigen/Eigen/Dense"
    #include <xtensor/xarray.hpp>
    #include <xtensor/xio.hpp>
    #include <xtensor/xview.hpp>
    #include <xtensor/xrandom.hpp>
    #include <xtensor-blas/xlinalg.hpp> //-lblas -llapack for cblas,   -llapack -L OpenBLAS/OpenBLAS_Install/lib -l:libopenblas.a -pthread for openblas

    //including accurate timer
    #include <chrono>
    //including vector array
    #include <vector>

    void basicMatrixComparisonEigen(std::vector<int> dims, int numrepeats = 1000);
    void basicMatrixComparisonXtensor(std::vector<int> dims, int numrepeats = 1000);
    
    int main()
    {
      std::vector<int> sizings{1, 10, 100, 1000, 10000, 100000};
    
      basicMatrixComparisonEigen(sizings, 2);
      basicMatrixComparisonXtensor(sizings,2);
      return 0;
    }
    
    
    void basicMatrixComparisonEigen(std::vector<int> dims, int numrepeats)
    {
      std::chrono::high_resolution_clock::time_point t1;
      std::chrono::high_resolution_clock::time_point …
Run Code Online (Sandbox Code Playgroud)

benchmarking numpy matrix-inverse eigen xtensor

5
推荐指数
1
解决办法
3181
查看次数

xxtor C++的xt :: where的示例用法

我是xtensor的新手.我想知道如何使用xt :: where的输出.在python中,例如假设imap是一个nd数组,np.where(imap> = 4)返回两个带索引的数组,可以使用=运算符直接赋值.请让我知道如何在xtensor C++上下文中使用它.任何小例子都会有很大的帮助.

谢谢.

numpy c++14 xtensor

4
推荐指数
1
解决办法
361
查看次数

如何在 Bazel 工作区中构建仅标头的 C++ 库?

我正在开发一个 C++ 项目,我需要 Numpy 之类的数组和 C++ 中的功能。我找到了一些替代方案,例如xtensorNumCpp等。这些是仅标头的库。问题是我是第一次尝试 Bazel,所以我不知道如何将仅标头库添加到 Bazel 工作区。在 Bazel 的其他问题上提出了一些建议,例如 genrule-environment、rules-foreign-cc。我已将 http_archive 添加到 WORKSPACE 文件中,但我不确定要在 BUILD 文件中添加什么。

工作空间文件

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

all_content = """filegroup(name = "all", srcs = glob(["**"]), visibility = ["//visibility:public"])"""

http_archive(
    name = "xtensor",
    build_file_content = all_content,
    strip_prefix = "xtensor-master",
    urls = ["https://github.com/xtensor-stack/xtensor/archive/refs/heads/master.zip"],
)

http_archive(
    name = "NumCpp",
    build_file_content = all_content,
    strip_prefix = "NumCpp-master",
    urls = ["https://github.com/dpilger26/NumCpp/archive/refs/heads/master.zip"],
)

http_archive(
    name = "rules_foreign_cc",
    sha256 = "c2cdcf55ffaf49366725639e45dedd449b8c3fe22b54e31625eb80ce3a240f1e",
    strip_prefix = "rules_foreign_cc-0.1.0",
    url = "https://github.com/bazelbuild/rules_foreign_cc/archive/0.1.0.zip",
)

load("@rules_foreign_cc//:workspace_definitions.bzl", …
Run Code Online (Sandbox Code Playgroud)

c++ bazel xtensor

4
推荐指数
1
解决办法
1198
查看次数

Xtensor类型与NumPy的性能对比

在使用cookiecutter设置并使用xsimd启用S​​IMD内部函数之后,我尝试了xtensor-python,并开始编写一个非常简单的sum函数。

inline double sum_pytensor(xt::pytensor<double, 1> &m)
{
  return xt::sum(m)();
}
inline double sum_pyarray(xt::pyarray<double> &m)
{
  return xt::sum(m)();
}
Run Code Online (Sandbox Code Playgroud)

用于setup.py构建我的Python模块,然后与比较,测试了从np.random.randn不同大小构造的NumPy数组上的求和函数np.sum

import timeit

def time_each(func_names, sizes):
    setup = f'''
import numpy; import xtensor_basics
arr = numpy.random.randn({sizes})
    '''
    tim = lambda func: min(timeit.Timer(f'{func}(arr)',
                                        setup=setup).repeat(7, 100))
    return [tim(func) for func in func_names]

from functools import partial

sizes = [10 ** i for i in range(9)]
funcs = ['numpy.sum',
         'xtensor_basics.sum_pyarray',
         'xtensor_basics.sum_pytensor']
sum_timer = …
Run Code Online (Sandbox Code Playgroud)

c++ python performance numpy xtensor

2
推荐指数
1
解决办法
1012
查看次数