首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >np.arange与C++ iota的比较,iota较慢

np.arange与C++ iota的比较,iota较慢
EN

Stack Overflow用户
提问于 2018-01-30 18:53:00
回答 1查看 834关注 0票数 3

我写了一小段代码来生成一个整数序列,并将其与np.arange()进行了比较,我发现np.arange()更快。谁能给我一些提示,有没有更快的C++实现?

代码如下:

代码语言:javascript
复制
#include <iostream>
#include <chrono>
#include <ctime>
#include <array>
#include <vector>
#include <numeric>
template <typename T>
std::vector<T> range(T start, T end) {
    size_t N = (int)floor(end - start) + 1;
    std::vector<T> vec(N);
    std::iota(vec.begin(), vec.end(), start);
    return vec;
}

int main() {
    auto start = std::chrono::system_clock::now();
    std::vector<int> x_range = range(0, 1024);
    auto end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

Python代码很简单:

代码语言:javascript
复制
%timeit x = np.arange(0, 1024)

Python时间:1.51e-6 s C++时间:1.6e-5 s

Python比这里的C++实现快10倍。

平台: Win10,Visual Studio Community 2017,在O2和Ox优化模式下。两者得到的时间顺序大致相同-- 1.x e-5 s

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 19:48:59

谢谢大家,虽然这是一个简单的问题,但我仍然学到了很多。

以下是与问题中的代码不同的新代码,也许同情心会帮助一些新手更好地理解:

代码语言:javascript
复制
#include <iostream>
#include <chrono>
#include <ctime>
#include <array>
#include <vector>
#include <numeric>
#include <iostream>

template <typename T>
std::vector<T> range(T start, T end) {
    size_t N = (int)floor(end - start);
    std::vector<T> vec;
    vec.reserve(N);
    std::iota(vec.begin(), vec.end(), start);
    return vec;
}

int main() {
    auto start = std::chrono::system_clock::now();
    for (int i = 0; i < 100000000; ++i) {
        std::vector<int> x_range = range(0, 1000);
    }
    auto end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n";
    system("pause");

}

现在C++实现时间: 7.14136e-8 s。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48519640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档