使用两个 C++ 向量作为参数的“复杂”操作函数的最佳方法

see*_*eel 2 c++

为了简单起见,请问用以下 Python 代码在 C++ 中编写以下代码的最佳方法是什么

import numpy as np

X = np.array([1,2,3,...])
Y = np.array([10,11,12,...])

def funct(X,Y):
  return 0.5 * X + 0.5 * 3 * Y
Run Code Online (Sandbox Code Playgroud)

或者,在没有 Python 的情况下进行解释,有没有办法:

#include <vector>

std::vector<double> Z {};
std::vector<double> X {1,2,3,4};
std::vector<double> Y {5,6,7,8};

Z = 0.5 * X + 0.5 * 3 * Y; // something like this
Run Code Online (Sandbox Code Playgroud)

Ted*_*gmo 6

也许valarray是你需要的:

#include <iostream>
#include <valarray>

int main() {
    std::valarray<double> Z {};
    std::valarray<double> X {1,2,3,4};
    std::valarray<double> Y {5,6,7,8};
    Z = 0.5 * X + 0.5 * 3 * Y;

    for(auto v : Z) std::cout << v << '\n';
}
Run Code Online (Sandbox Code Playgroud)

输出

8
10
12
14
Run Code Online (Sandbox Code Playgroud)

请注意std::valarray:“当两个参数是大小不同的 valarray 时,行为未定义。

  • 很高兴看到使用 valarray 的建议!我很少看到它被使用。确实老了,但是成熟到什么程度呢?我的意思是,优化器是否正确支持它?上次我尝试在 ms vs2019 中使用 vallarray 时,结果发现它实际上在 ms stl 中被破坏了(现已修复)。 (2认同)
  • 好的,发现我的错误了。std::valarray 的构造函数错误。无论如何,[可以看出 valarray 比 vector/algo 快 3.3 倍](https://quick-bench.com/q/G3X-qT_QMz--r8aGrTbMA6LlmKM) 。但由于 valarray 使用表达式树,我不确定实际情况是否如此。[我做了第二个工作台,累积输出](https://quick-bench.com/q/GFMW0tUmkmThxv3s3VbTgITkpNk),它给出了不同的结果(~1.5x),但累积也在工作台循环中,所以板凳并不是孤立的。不过 valarray 似乎更快!通知! (2认同)