小编Vin*_*ent的帖子

修改函数内的numpy数组?

我对下面的简单程序有疑问:

def my_function(my_array = np.zeros(0)):
    my_array = [1, 2, 3]

my_array = np.zeros(0)
my_function(my_array)
print my_array
Run Code Online (Sandbox Code Playgroud)

它打印一个空数组,好像my_array是通过复制传递而不是通过函数内部的引用传递.怎么纠正?

python arrays numpy pass-by-reference

3
推荐指数
3
解决办法
2万
查看次数

python中的数组插值?

我有两个数组:

array_x = [x1, x2, x3, x4... xn]
array_y = [y1, y2, y3, y4... yn]
Run Code Online (Sandbox Code Playgroud)

我想有一个函数f(array_x, array_y, value_x)返回通过插值value_y关联到value_x数组.

怎么做 ?

python arrays interpolation numpy scipy

3
推荐指数
1
解决办法
5087
查看次数

检测类型是否为零元素数组?

考虑以下功能:

template <typename Type>
void f(const Type& x)
Run Code Online (Sandbox Code Playgroud)

无论传递的类型是空std::tuple还是空,我都想做一些特殊的事情(没有特化)std::array.对于nu元素的元组,我可以使用std::is_same<Type, std::tuple<>>::value但是我可以用什么技巧来检测零元素数组?

(我正在寻找一种不需要创建另一个函数或类的解决方案,......)

c++ arrays templates type-traits c++11

3
推荐指数
1
解决办法
340
查看次数

类型特征对于基本类型的所有const/volatile/signed/unsigned版本都是如此

考虑以下测试:

std::is_same<T, bool>::value
std::is_same<T, char>::value
std::is_same<T, short int>::value
std::is_same<T, int>::value
std::is_same<T, long int>::value
std::is_same<T, long long int>::value
std::is_same<T, float>::value
std::is_same<T, double>::value
std::is_same<T, long double>::value
Run Code Online (Sandbox Code Playgroud)

问题是,如果T = const unsigned char所有测试都是假的,我希望这个std::is_same<T, char>::value是真的.或者,如果T = volatile signed long long int我想std::is_same<T, long long int>::value成为现实.怎么做type_traits

c++ qualifiers type-traits c++11

3
推荐指数
1
解决办法
688
查看次数

标准if/else在编译时已知的条件?

我知道C++中的一些元编程技术可以在编译时计算常量.元函数中的大多数时间分支是通过三元运算符完成的,可以在编译时以与标准if/else相反的方式进行评估.

但是关于这种功能:

template <unsigned int N>
void f()
{
    if (N == 0) {
        // Some computations here
    } else if (N <= 42) {
        // Some computations here
    } else {
        // Some computations here
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器会做什么(假设-O3)?编译器知道f<0>()将始终在第一种情况下f<32>()分支,将始终在第二种情况下f<64>()分支,并且将始终在第三种情况下分支.

编译器会删除永远存在的分支false吗?它会直接分支到唯一有效的案例吗?

c++ optimization templates if-statement c++11

3
推荐指数
1
解决办法
868
查看次数

投掷三元运算符?

阅读三元运算符的文档,我意识到有两个我从未使用过的特殊情况:

  • 您可以将它与返回void的函数一起使用: bool ? void : void
  • 你可以扔进一个三元运算符

以下是有效的,完全定义的,经常使用的(假设这是一个类成员,并且该类拥有一个Type _data[Size])?

Type& at(const unsigned int i) 
{
    return (i < Size) ? (_data[i]) : (throw std::out_of_range("ERROR"));
}
Run Code Online (Sandbox Code Playgroud)

c++ ternary-operator throw c++11

3
推荐指数
1
解决办法
480
查看次数

不允许在C++中使用多参数operator []的基本原因

目前,我们只能operator[]用一个参数重载.

我想知道是否有一个根本原因,为什么标准不允许operator[]多个参数重载?

对于C++ 17,是否有这样的propoposals?

c++ standards multidimensional-array subscript c++11

3
推荐指数
2
解决办法
145
查看次数

右移位的奇怪行为

有人可以解释我为什么以下代码:

#include <iostream>
#include <bitset>

int main()
{
    unsigned char i = 2;
    std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) << i)<<std::endl;
    std::cout<<std::bitset<8>((~static_cast<unsigned char>(0)) >> i)<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

生产:

11111100
11111111
Run Code Online (Sandbox Code Playgroud)

并不是:

11111100
00111111
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation bit-shift

3
推荐指数
1
解决办法
120
查看次数

计算直线上点的投影的优化函数?

考虑以下问题: 投影

我的问题是:如何优化以下独立功能:

// Computation of the coordinates of P
inline std::array<double, 3> P(const std::array<double, 3>& A, 
                               const std::array<double, 3>& B,
                               const std::array<double, 3>& M)
{
    // The most inefficient version in the world (to be verified)
    std::array<double, 3> AB = {B[0]-A[0], B[1]-A[1], B[2]-A[2]};
    std::array<double, 3> AM = {M[0]-A[0], M[1]-A[1], M[2]-A[2]};
    double norm = std::sqrt(AB[0]*AB[0]+AB[1]*AB[1]+AB[2]*AB[2]);
    double dot = AB[0]*AM[0]+AB[1]*AM[1]+AB[2]*AM[2];
    double d1 = dot/norm;
    std::array<double, 3> AP = {AB[0]/d1, AB[1]/d1, AB[2]/d1};
    std::array<double, 3> P = {AP[0]-A[0], AP[1]-A[1], AP[2]-A[2]};
    return P;
}

// …
Run Code Online (Sandbox Code Playgroud)

c++ 3d optimization geometry c++11

3
推荐指数
1
解决办法
9700
查看次数

完美转发到数据成员的成员函数?

考虑一个具有private std::vector数据成员的类:

class MyClass 
{
    private: 
        std::vector<double> _data;
    public:
        template <class... Args>
        /* something */ insert(Args&&... args) /* something */
        {
            return _data.insert(std::forward<Args>(args)...);
        }
};
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法(使用C++ 14自动/可变参数模板/前进...)传输的给定函数_dataMyClass(例如insert这里),并为用户提供相同的接口?

c++ forwarding member auto c++14

3
推荐指数
1
解决办法
1085
查看次数