np.arange与C++iota的比较,iota更慢
Comparison of np.arange with C++ iota, iota is slower
我写了一小段代码来生成一个整数序列,并将其与np.arange()
进行比较,我发现np.arange()
更快。任何人都可以给我一些提示,如果有更快的C++实现?
这是代码:
#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() << "sn";
}
Python 代码很简单:
%timeit x = np.arange(0, 1024)
蟒蛇时间:1.51e-6 s
C++时间:1.6e-5 s
Python 比这里的C++实现快 10 倍。
平台:Win10,Visual Studio Community 2017,在O2和Ox优化模式下。两者或多或少得到相同的时间顺序 - 1.x e-5 s
.
谢谢大家,虽然这是一个简单的问题,但我仍然学到了很多东西。
这是与问题中的代码不同的新代码,也许同情心会帮助一些新手更好地理解:
#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() << "sn";
system("pause");
}
现在C++实施时间:7.14136e-8 s。
相关文章:
- 是什么导致我的循环在第一次迭代中运行得更慢
- 为什么/unordered_map和unordered_set更慢?
- 为什么这个版本的strcmp更慢?
- 从 Swift 调用C++代码比调用 C 代码更"expensive"还是更慢?
- np.arange与C++iota的比较,iota更慢
- 为什么将指数移动平均线应用于 0.0 会更慢
- 如何使用 Open MPI 使我的程序更快?我的 Open MPI 程序目前比原来慢,我有什么不明白的?
- LD_BIND_NOW可以使可执行文件运行得更慢?
- 为什么 std::unordered_map 很慢,我可以更有效地使用它来缓解这种情况吗?
- 为什么windows第一次打开文件的速度这么慢,有没有更快的方法
- 性能权衡-MATLAB何时比C/C++更好/更慢
- Windows cpp 目标在更高的分辨率下会变慢
- 推力::max_element 比较慢 cublasIsamax - 更有效的实现
- 与串行相比,openMP 并行化 for 循环的速度更慢
- CUDA 程序比 CPU 程序慢,但内核更快
- QTextEdit插入和删除行的速度非常慢.无论如何,让它更快
- 从最慢的线程或从更快的线程激活线程
- 哪个更慢,jpeg 或 png
- 为了测试目的,故意使c++程序运行得更慢
- 通过"this->member"访问 c++ 成员类是否比隐式调用"member"更快/更慢