小编Dan*_*Dan的帖子

具有if语句的Numpy数组的功能

我正在使用MatplotlibNumpy来制作一些情节.我希望定义一个函数,给定一个数组返回另一个数组,其值为elementwise,例如:

def func(x):
     return x*10

x = numpy.arrange(-1,1,0.01)
y = func(x)
Run Code Online (Sandbox Code Playgroud)

这可以.现在我希望在里面有一个if语句func,例如:

def func(x):
     if x<0:
          return 0
     else:
          return x*10

x = numpy.arrange(-1,1,0.01)
y = func(x)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会引发以下错误

Traceback (most recent call last):
  File "D:\Scripts\test.py", line 17, in <module>
    y = func(x)
  File "D:\Scripts\test.py", line 11, in func
    if x<0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

我查看了文档all(),any() …

python numpy matplotlib

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

提升程序选项语法

我正在使用boost :: program_options从命令行参数中读取用户的输入.它工作得非常好,允许我输出有用的使用信息并正确验证输入.但是,默认情况下,长选项名称必须在双击之后,例如--my_long_option短选项在单个短划线之后,并且必须是单个字符,例如; -m.

还有办法要么......

  • 单个后允许长期选项-
  • 允许短选项有多个字符?

因此允许我拥有看起来像的命令行

./a.out -myopt1 foo -myopt2 bar
Run Code Online (Sandbox Code Playgroud)

这两种可能性应该具有相同的效果,但从编程的角度来看,第一种可能会更好.我看了一下boost :: program_options :: command_line_style,但看起来它看起来不像我需要的那样.

谢谢

编辑:进一步接受下面接受的答案,让它使用该样式必须添加以下代码(遵循提升文档的命名约定)

po::store(
    po::command_line_parser(ac,av)
        .options(desc)
        .style(
            po::command_line_style::unix_style
          | po::command_line_style::allow_long_disguise)
        .run(),
    vm);
Run Code Online (Sandbox Code Playgroud)

c++ command-line boost boost-program-options

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

方程解析库C++

我肯定某个地方肯定会有这样的东西,但我似乎无法在这里找到任何有用的东西或谷歌.我曾希望Boost可能会有一些东西,但不是.

我所追求的是一个轻量级库,它可以从用户那里获取一个字符串,"y=2x+3"并解析它返回一个y在给定时返回的对象或函数x.

任何人都可以为此推荐一些东西吗?(最糟糕的情况是我可以自己写一个,但没有必要重新发明轮子和所有.)

必要时可以假设的事情;

  • 预设变量名称
  • 固定的变量数

c++ parsing equation

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

匿名函数C++

我想使用的功能signal(int,void(*)(int)),从<csignal>处理浮点异常SIGFPE.我希望能够打印一些有用的诊断,除了只是一条消息说"浮点异常"或其他类似的东西.这意味着我作为处理程序传递的函数signal需要访问我的代码中的一些数据.这就是摩擦.

该函数必须返回void并仅接受1个类型的参数int.我不能使处理程序成为我的数据存储类的成员函数,因为那时类型将由void(Foo::*)(int)隐藏this指针引起.

我想过使用lambdas尝试创建这样的匿名函数;

void handler(int nSig, Foo data)
{
    // do something
}
// snip
Foo data;
signal(SIGFPE, [&](int nSig)->void{handler(nSig,data);});
Run Code Online (Sandbox Code Playgroud)

但是因为lambda data从外部捕获变量,所以编译器不会将它强制转换为指针void(*)(int)(这是一种耻辱,因为这似乎是lambdas的理想用法).

我可以简单地创建data一个可以在其中看到的全局变量,handler但出于显而易见的原因我不愿意这样做.

所以我的问题是这样的; 在C++中模仿匿名函数的最佳方法是什么?

注意:我更喜欢本机C++解决方案而不必使用boost或等效.

c++ lambda anonymous-function c++11

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

Kotlin + Gradle未解决的参考

根据这个问题,我正在尝试设置以下项目结构

project/
   settings.gradle
   projectB/  # some common code (using spring-boot)
       build.gradle
       com/
          foo/
             bar/...
   projectA/  # an android app
       build.gradle
       com/
          foo/
             baz/...
Run Code Online (Sandbox Code Playgroud)

settings.gradle 好像

rootProject.name = "project"
include ":projectB"
project(":projectB").projectDir = new File(rootDir, './projectB')
include ":projectA"
project(":projectA").projectDir = new File(rootDir, './projectA')
Run Code Online (Sandbox Code Playgroud)

projectA/build.gradle我有

dependencies {
    implementation project(":projectB")
}
Run Code Online (Sandbox Code Playgroud)

Android Stuido似乎很高兴并将提供代码完成并在projectB内部搜索代码projectA.但编译失败并出现错误

Unsresolved reference: bar
Run Code Online (Sandbox Code Playgroud)

在我尝试的线上import com.foo.bar.whatever.

我已尝试对各种gradle文件进行了许多不同的更改,但没有修复此错误.

这个设置有什么问题,如何解决?

谢谢

gradle kotlin android-studio android-gradle-plugin spring-boot

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

可变函数接受函数/可调用对象

问题

我希望创建一个函数,它接受任意数量的仿函数对象,或者更通常只是可调用对象(不同类型),并将它们应用于内部数据结构.该函数将在我的代码中的不同点使用不同数量的仿函数.

而不是使不同的版本接受1,2,3 ......等重复代码我想到使用可变参数模板.

我找到了一个解决方案,我将在下面发布作为答案,因为我在Google上找不到任何具体的内容,而其他人可能会觉得它很有用.但是,如果有人有任何更好的想法发布,请.我觉得应该有一个标准的方法来做到这一点?

天真的尝试

我知道这不行,但我的第一次尝试是

#include <iostream>
using namespace std;

struct FunctorA {
    void operator() () {
        cout << "FunctorA" << endl;
    }
};

struct FunctorB {
    void operator() () {
        cout << "FunctorB" << endl;
    }
};

template<typename... Fs>
void apply_functors(Fs... fs) {
     fs()...;   // will not work - can only expand packs in certain situations (e.g. as funciton 
}

int main(void) {
    apply_functors(FunctorA(),FunctorB());
    apply_functors(FunctorA());
    apply_functors([]()->void{ cout << "Lambda" << endl; });
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为我们只允许在某些情况下 …

c++ functor variadic-templates c++11

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

Cuda与Boost

我目前正在编写一个CUDA应用程序,并希望使用boost :: program_options库来获取所需的参数和用户输入.

我遇到的麻烦是NVCC无法处理编译提升文件的any.hpp错误,例如

1>C:\boost_1_47_0\boost/any.hpp(68): error C3857: 'boost::any': multiple template parameter lists are not allowed
Run Code Online (Sandbox Code Playgroud)

我在网上搜索并发现这是因为NVCC 无法处理boost代码中使用的某些结构,但是NVCC应该将主机代码的编译委托给C++编译器.在我的情况下,我使用的是Visual Studio 2010,因此应该传递主机代码cl.

由于NVCC似乎变得困惑,我甚至围绕增强内容编写了一个简单的包装器并将其粘贴在一个单独的.cpp(而不是.cu)文件中,但我仍然遇到构建错误.很奇怪错误是在编译我main.cu而不是wrapper.cpp但仍然是由boost引起的,即使main.cu不包括任何增强代码.

有没有人知道这个问题的解决方案甚至解决方法?

c++ boost cuda nvcc

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

Matplotlib LaTeX:与希腊字母不一致的行为(特别是\ rho)

我正在尝试将一些轴标签添加到包含希腊字母'rho'的图形中.要做到这一点,我想使用Matplotlib的LaTeX功能,但它似乎与\ rho符号有问题.

这是一个最小的例子:

import matplotlib.pyplot as plt
from matplotlib import rc,rcParams

rc('text',usetex=True)
rcParams.update({'font.size': 16})

plt.plot([0,1,2,3,4],[0,1,4,9,16])
plt.xlabel('\rho A_i') # works if \rho is replaced with, for example, \sigma
plt.ylabel('Something else')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在第一次运行时,我得到一堆LaTeX错误和一个空白的图形窗口,再次运行显示图形但是xlabel读取' ho Ai ',其中i是下标符合预期.

奇怪的是,如果我\rho用其他东西替换,比如,\sigma它会正确显示.任何人都可以告诉我为什么它对我的代码示例不满意以及如何修复它?

谢谢.

我尝试将表达式放入,$..$但没有改变.

python latex matplotlib

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

将std :: array作为模板可变参数函数的参数传递

我试图了解C++ 11中的可变参数模板.我有一个类,它基本上是一个包装器std::array.我希望能够将函数对象(理想情况下为lambdas)传递给成员函数,然后将std::array传递的元素作为函数对象的参数.

我用a static_assert来检查参数的数量是否与数组的长度相匹配,但我想不出将元素作为参数传递的方法.

这是代码

#include <iostream>
#include <array>
#include <memory>
#include <initializer_list>

using namespace std;

template<int N, typename T>
struct Container {
    template<typename... Ts>
    Container(Ts&&... vs) : data{{std::forward<Ts>(vs)...}} {
        static_assert(sizeof...(Ts)==N,"Not enough args supplied!");
    }

    template< typename... Ts>
    void doOperation( std::function<void(Ts...)>&& func )
    {
        static_assert(sizeof...(Ts)==N,"Size of variadic template args does not match array length");

        // how can one call func with the entries
        // of data as the parameters (in a way generic with N) …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

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

多种输出格式的设计模式

我有一个类结构,它表示(内部)我希望输出到文件的数据.

一些成员变量对数据类是私有的,因此它可以自我管理并阻止出错.

然后我希望将这些数据输出为多种文件格式.我可以做点什么

savefile_formatA(DataClass* pDataClass, ofstream& fout);
savefile_formatB(DataClass* pDataClass, ofstream& fout);
Run Code Online (Sandbox Code Playgroud)

除了函数需要再看到私有成员变量DataClass.我当然可以savefile_formatXYZ()做朋友的功能但是我需要为每种不同的格式添加一个朋友声明.

是否有解决此类问题的标准设计模式?你会如何解决这个问题?

谢谢!

c++ oop encapsulation file-format design-patterns

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