小编Tom*_*eus的帖子

重载本地lambda函数

我有一个几乎相同的功能doubleint输入.因此我重载了这两种类型的功能.不幸的是,核心是变体doubleint变体之间存在差异.目前,我依赖于一个过载的"核心"功能.为了增强可读性,我希望将重载(非常短)的核心函数作为函数本身的一部分,例如使用lambda函数.

下面的这个例子总结了我当前的布局(当然真正的代码更复杂一些).

#include <iostream>
#include <cstdlib>

double func_core ( double a, double b ) {
  return a*b;
}

int func_core ( int a, int b ) {
  if ( a==b )
    return 1.;
  else
    return 0.;
}

template <class T> T func ( T a, T b ) {
  return func_core(a,b);
}

int main ( void ) {
  std::cout << func(10 ,20 ) << std::endl;
  std::cout << func(10.,20.) << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 c++14

2
推荐指数
1
解决办法
129
查看次数

将类转换为派生类,而不进行修改

我正在使用一组类A,B...这些类是独立的,除了它们有一个method共同点.现在我想在向量中组合这些类,以便method在一个循环中调用.似乎最好的解决方案是从类中创建类派生类Parent(见下文).

现在问题如下.我想创建为每个类(一个只有头库a.h,b.h...).在那里,我希望课程完全独立.仅在主模块中,我想将类"附加"到a Parent以便能够将它们组合在一个向量中.我该怎么做呢?或者我是否必须使用void*指针向量?或者是否有另一种方法将这些类组合在一个向量中?


列表中的类:具有父/子范例

这是我能够组合向量中的类.注意我特别想避免类定义中的父/子范例.但我仍然希望将它们组合在一个向量中.

#include <iostream>
#include <vector>
#include <memory>

class Parent
{
public:
  virtual ~Parent(){};
  virtual void method(){};
};

class A : public Parent
{
public:
  A(){};
  ~A(){};
  void method(){};
};

class B : public Parent
{
public:
  B(){};
  ~B(){};
  void method(){};
};

int main()
{
  std::vector<std::unique_ptr<Parent>> vec;

  vec.push_back(std::unique_ptr<Parent>(new A));
  vec.push_back(std::unique_ptr<Parent>(new A));
  vec.push_back(std::unique_ptr<Parent>(new B));

  for ( auto &i: vec )
    i->method(); …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
70
查看次数

使用一个“plot”调用绘制多条曲线时的一个图例条目

我正在通过使用一个plot调用绘制多条曲线来创建一个网格:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.array([[0,1], [0,1], [0,1]])
y = np.array([[0,0], [1,1], [2,2]])

ax.plot([0,1],[0,2], label='foo', color='b')

ax.plot(x.T, y.T, label='bar', color='k')

ax.legend()

plt.show()
Run Code Online (Sandbox Code Playgroud)

生成的图例具有与曲线一样多的“条形”条目(见下文)。我希望每次plot调用只有一个图例条目(在这种情况下只有一次“bar”)。

我想要这样我可以有其他绘图命令(例如绘制'foo'曲线的那个),如果它们有标签,它们的曲线会自动包含在图例中。我特别想避免在构建图例时手动选择句柄,而是使用 matplotlib 的功能通过是/否在绘图时包含标签来处理这个问题。我怎样才能做到这一点?

在此处输入图片说明

python matplotlib

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

argparse:像帮助字符串一样处理版本字符串

我正在使用 Python 3.6 和 argparse 1.1。

此外-h/--help我想要一个选项-v/--version打印一个带有版本信息的字符串并退出程序(就像使用帮助字符串一样)。但是,当我也有位置参数时,执行

$ example --version
Run Code Online (Sandbox Code Playgroud)

结果是

usage: example ... 
error: too few arguments
Run Code Online (Sandbox Code Playgroud)

变通解决方案

我有一个解决方案,我不喜欢它,因为我需要相当多的代码行来做一些 argparse 可以做得更好的事情。

import sys,argparse

class MyParser(argparse.ArgumentParser):
    def format_help(self):
        return 'Help string\n'

def printversion():
    print('0.0.1')
    sys.exit(1)

if len(sys.argv)>1:
    if len(sys.argv[1])>0:
        if sys.argv[1] in ['--version']:
            printversion()

parser = MyParser()
parser.add_argument('argument',nargs=1,type=int)
parser.add_argument('-v','--version',action='store_true')

args = vars(parser.parse_args())

if args['version']: printversion()
Run Code Online (Sandbox Code Playgroud)

python argparse

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

使用Eigen找出两个列表之间的差异

我想找到两个列表之间的区别.例如:

// two lists:
A = [ 0, 1, 2, 3, 4, 5, 6 ];
B = [ 1, 4, 5 ];

// difference between the lists:
C = [ 0, 2, 3, 6 ];
Run Code Online (Sandbox Code Playgroud)

我使用C++的STL库完成了这个,如下所示:

#include <iostream>
#include <vector>

int main()
{
  std::vector<size_t> A = {0, 1, 2, 3, 4, 5, 6};
  std::vector<size_t> B = {1, 4, 5};
  std::vector<size_t> C;

  std::set_difference(A.begin(),A.end(), B.begin(),B.end(), std::inserter(C,C.begin()));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,因为我的应用程序主要使用Eigen,所以我现在也想使用Eigen.我无法在文档中或在线找到我想要的内容.

请注意,我特别想避免编写自己的函数.

c++ eigen eigen3

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

如何将多个.cpp文件添加到单个CMakeLists.txt中

我目前有一个项目,其中 有一个模板,CMakeLists.txt用于一个可执行文件,一个标头和一个 .cpp文件。我希望它有几个.cpp文件,但仍然要全部编译和构建。我应该如何使CMakeLists.txt文件生成并编译所有.cpp文件,如何检查它是否有效?

c++ executable header cmake

0
推荐指数
1
解决办法
1613
查看次数

如何在列中为 numpy 数组添加标签

如何在列中添加标签作为 numpy 数组的字符串

我需要这个输出

   One Two Three 
A   1,  2,  3  
B   4,  5,  6  
Run Code Online (Sandbox Code Playgroud)
import numpy as np
import pandas as pd
a=pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])],
orient='index', columns=['one', 'two', 'three'])
print(a)
Run Code Online (Sandbox Code Playgroud)

当我使用这段代码时,代码给了我正确的结果,但也给了我一个错误;我不明白。

注意:我不明白这一行

a=pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])],
    orient='index', columns=['one', 'two', 'three'])
Run Code Online (Sandbox Code Playgroud)

我需要另一种方法来实现这一点。

输出:

    one  two  three 
A    1    2      3
B    4    5      6
C:\Users\Toufik\Anaconda3\lib\site-packages\ipykernel_launcher.py:4:
FutureWarning: from_items is deprecated. Please use
DataFrame.from_dict(dict(items), ...) instead.
DataFrame.from_dict(OrderedDict(items)) may be used to preserve the …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

0
推荐指数
1
解决办法
5389
查看次数

标签 统计

c++ ×4

python ×3

argparse ×1

c++11 ×1

c++14 ×1

cmake ×1

eigen ×1

eigen3 ×1

executable ×1

header ×1

lambda ×1

matplotlib ×1

numpy ×1

pandas ×1