小编Ser*_*mal的帖子

c ++ enable_if用于非类型模板参数

我对部分模板特化有点困惑...我有一些代码依赖于算术数据类型T,并且在一个小的整数DIM上.我希望能够为不同的DIM值指定不同的类方法.使用部分模板专业化的不可能性使我探索了enable_if.这正是我所需要的...除了我希望它返回一个数字而不是一个类型.我怎样才能做到这一点?以下代码应说明我想要的内容.

#include <stdio.h>
#include <iostream>
#include <type_traits>

template <typename T, int DIM>
class foo{
    public:
        T function();

};


template <typename T, int DIM>
T foo<T, std::enable_if<DIM == 1>::value>::function(){
    // do something
    return 1.0;
}

template <typename T, int DIM>
T foo<T, std::enable_if<DIM == 2>::value>::function(){  
    // do something else
    return 2342.0;
}

int main(){
    foo<int, 1> object;
    int ak = object.function();
    std::cout << ak << "\n";

    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization enable-if non-type

7
推荐指数
2
解决办法
1210
查看次数

Python numpy 代码比 eigen3 或普通 C++ 更高效

我在 Python3(使用 numpy)中有一些代码,我想将它们转换为 C++(使用 eigen3)以获得更高效的程序。所以我决定测试一个简单的例子来评估我将获得的性能提升。代码由两个随机数组组成,这些数组要按系数相乘。我的结论是 numpy 的 python 代码比 C++ 的代码快 30%。我想知道为什么解释的 python 代码比编​​译的 C++ 代码快。我在 C++ 代码中遗漏了什么吗?

我正在使用 gcc 9.1.0、Eigen 3.3.7、Python 3.7.3 和 Numpy 1.16.4。

可能的解释:

C++ 程序没有使用矢量化
Numpy 比我想象的要优化得多
Time 测量每个程序中的不同内容

Stack Overflow ( Eigen Matrix vs Numpy Array multiplication performance ) 中有一个类似的问题。我在我的电脑上测试了这个并得到了预期的结果,即 eigen 比 numpy 更有效,但这里的操作是矩阵乘法而不是系数乘法。

Python代码(main.py)
执行命令:python3 main.py

import numpy as np
import time

Lx = 4096
Ly = 4000

# Filling arrays
a = np.random.rand(Lx, Ly).astype(np.float64)
a1 = np.random.rand(Lx, Ly).astype(np.float64)

# Coefficient-wise product
start = …
Run Code Online (Sandbox Code Playgroud)

c++ python performance numpy eigen3

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