我不明白为什么这样可以正常工作:
std::array<double, 2> someArray = {0,1};
std::shared_ptr<MyClass> myobj = std::make_shared<MyClass>(someArray);
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
std::shared_ptr<MyClass> myobj = std::make_shared<MyClass>({0,1});
Run Code Online (Sandbox Code Playgroud)
编译器说:
too many arguments to function ‘std::shared_ptr< _Tp> std::make_shared(_Args&& ...)
...
candidate expects 1 argument, 0 provided
Run Code Online (Sandbox Code Playgroud)
问题:有人可以弄清楚为什么会发生这种情况吗?是否有办法在不定义额外变量的情况下解决第二种方法?
编辑:的
示例MyClass:
#include <memory> //For std::shared_ptr
#include <array>
#include <iostream>
class MyClass{
public:
MyClass(std::array<double, 2> ){
std::cout << "hi" << std::endl;
};
};
Run Code Online (Sandbox Code Playgroud) 变量:
x 和 y 是形状为 (N, 2) 的 N 个二维向量数组。
题:
有没有办法在两个数组中对应于相同位置的向量之间执行点积,而无需像列表理解那样显式地编写元素:[np.dot(x[i], y[i]) for i in range(N)] ?
通常,在 numpy 的其他函数中,我使用该选项axis = 1来实现这一点,但我发现 np.dot 中不存在它。有没有办法设法矢量化这个操作?