小编Spi*_*ros的帖子

在项目中更改CMAKE_CXX_FLAGS

我在CMakeLists.txt中有以下内容:

project( Matfile )

SET ( CMAKE_CXX_FLAGS "-std=c++0x" )

set ( SOURCES
      "foo.cpp"
      "bar.cpp"
    )

add_library(
        Matfile
        ${SOURCES}
)
Run Code Online (Sandbox Code Playgroud)

您可能想象,我想要做的是使用标志-std = c ++ 0x编译我的C++源代码(我使用的是gcc,我需要C++ 11的功能).不幸的是,这不起作用,在我使用cmake生成makefile时,变量CMAKE_CXX_FLAGS完全无效.

如何在项目文件中设置此变量?

这似乎是一个非常愚蠢的问题,但我只花了不少于两个小时试图解决这个问题.

cmake compiler-flags

40
推荐指数
4
解决办法
7万
查看次数

docker-compose 中的伪 tty 分配

在 docker 中,我可以简单地使用-t开关来docker run分配伪 tty(在这些示例中,我使用它nohup与真实 tty 分离):

$ nohup docker run    debian tty   # Produces "not a tty"
$ nohub docker run -t debian tty   # Produces "/dev/pts/0"
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 docker-compose 达到相同的结果。我有以下内容docker-compose.yml

version: "3"
services:
  myservice:
    image: debian
    tty: true
Run Code Online (Sandbox Code Playgroud)

我运行它有和没有nohup

$       docker-compose run myservice tty   # Produces "/dev/pts/0"
$ nohup docker-compose run myservice tty   # Produces "not a tty"
Run Code Online (Sandbox Code Playgroud)

的文档docker-compose run说我可以用来-T禁用 tty的分配,但似乎没有一种方法可以显式地启用它(这不是必需的,因为默认情况下应该分配一个tty)。

-T …

tty docker docker-compose

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

`boost :: any`和`std :: any`之间的区别

C++ 17引入了std::any基于boost库的对象容器boost::any.我的问题是:标准化的any等效于升级版本,还是存在差异?

一个类似的问题已发布有关variant,在这种情况下,存在一定的差异,但我找不到任何关于引用any.


编辑:我可以看到的差异是方法的可用性emplace.不仅仅是API的差异我对行为和保证之间的差异感兴趣.例如,不同的分配对我来说意义重大.

c++ boost c++17

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

查找表的CUDA内存

我正在设计一组数学函数,并在CPU和GPU(带有CUDA)版本中实现它们.

其中一些功能基于查找表.大多数表占用4KB,其中一些表更多.基于查找表的函数接受输入,选择查找表的一个或两个条目,然后通过内插或应用类似技术来计算结果.

我现在的问题是:我应该在哪里保存这些查找表?CUDA设备有许多用于存储值的地方(全局存储器,常量存储器,纹理存储器......).假设每个表可以被许多线程同时读取,并且输入值以及查找索引在每个warp的线程之间可以完全不相关(导致不相关的内存访问),哪个内存提供最快的访问?

我补充说,这些表的内容是预先计算的并且完全不变.

编辑

只是为了澄清:我需要存储大约10个不同的4KB查找表.无论如何,如果对于例如100个4KB表或例如10个16KB查找表的情况,对于这种情况的解决方案将是相同的将是很好的.

cuda lookup-tables

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

我可以使用`mpfr_t`作为输入和输出参数吗?

问题非常简单直接,但我找不到文档的答案.如果我有

mpfr_t a, b;
Run Code Online (Sandbox Code Playgroud)

我能做点什么吗

mpfr_add(a, a, b, rnd);
Run Code Online (Sandbox Code Playgroud)

这将计算的总和a,并b与存储的结果a.我不知道这是否会导致别名问题,可能导致结果无效,或者这是否正常.

c c++ mpfr arbitrary-precision

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

带有matplotlib的boxplot中的飞行物颜色

根据文档,该Axes.boxplot函数将字典flierprop作为参数来定义异常值的属性.不幸的是,我找不到关于这本词典的文档.特别是,我想定义标记边框的颜色.

默认情况下,绘制空心圆.可以设置面部颜色,如示例中所示.然而,圆形边界始终是黑线.我尝试使用键colormarkercolor(前者没有效果,后者产生错误).

如何设置标记线的颜色?

python statistics matplotlib boxplot

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

线性系统解决方案,分数为numpy

我有矩阵A和一个yfractions.Fraction对象表示的右侧矢量:

import random, fractions, numpy as np

A = np.zeros((3, 3), dtype=fractions.Fraction)
y = np.zeros((3, 1), dtype=fractions.Fraction)
for i in range(3):
    for j in range(3):
        A[i, j] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
    y[i] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
Run Code Online (Sandbox Code Playgroud)

我想A*x = y使用提供的函数解决系统numpy并获得以分数对象表示的结果,但遗憾的是,基本x = np.linalg.solve(A, y)结果返回标准浮点值:

>>> np.linalg.solve(A, y)

array([[-1.5245283 ],
       [ 2.36603774],
       [ 0.56352201]])
Run Code Online (Sandbox Code Playgroud)

有没有办法用分数对象获得精确的结果?


编辑

我想做的是numpy的内置功能是不可行的(从版本1.10开始 - 参见Mad Physicist的回答).人们可以做的是实现他/她自己的基于高斯消元的线性求解器,它依赖于求和,减法,乘法和除法,所有这些都是明确定义的并且与分数对象完全一致(只要分子和分母适合在数据类型中,我认为是任意长的).

如果您真的对此感兴趣,那么只需自己实现一个解算器,就可以轻松快速地完成(在线查看其中一个教程).我没那么感兴趣,所以我会坚持浮点结果.

python numpy linear-algebra fractions

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

派生类如何使用基类的受保护成员?

假设基类A定义了一个受保护的成员。派生类B使用此成员。

class A
{
public:
  A(int v) : value(v) { }

protected:
  int value;
};

class B : public A
{
public:
  B(int v) : A(v) { }
  void print() const;
  void compare_and_print(const A& other) const;
};
Run Code Online (Sandbox Code Playgroud)

该函数B::print只获取当前成员的值并打印它:

void B::print() const
{
  std::cout << "Value: " << value << "\n";
}
Run Code Online (Sandbox Code Playgroud)

另一个成员函数 ,B::compare_and_print采用 的实例A,检查它们的值并打印两者的最大值:

void B::compare_and_print(const A& other) const
{
  auto max_value = std::max(value, other.value);
  std::cout << "Max value: " …
Run Code Online (Sandbox Code Playgroud)

c++ protected private-members

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

如何在Fortran界面中使用用户定义的类型

在Fortran 2003模块中,我定义了一个被调用的类型t_savepoint,稍后,我想为一个被调用的子例程定义一个接口fs_initializesavepoint,它将一个类型的对象t_savepoint作为参数.

这是整个模块的代码:

module m_serialization

    implicit none

    type :: t_savepoint
        integer :: savepoint_index
        real    :: savepoint_value
    end type t_savepoint

    interface

        subroutine fs_initializesavepoint(savepoint)
            type(t_savepoint) :: savepoint
        end subroutine fs_initializesavepoint


    end interface

end module m_serialization
Run Code Online (Sandbox Code Playgroud)

我想要这样一个接口的原因是,稍后我将使这个fortran模块与C互操作.

如果我尝试编译它(gfortran-4.7.0),我收到以下错误消息:

            type(t_savepoint) :: savepoint
                                          1
Error: The type of 'savepoint' at (1) has not been declared within the interface
Run Code Online (Sandbox Code Playgroud)

如果我在子程序中移动类型的定义,则错误消失; 但如果那时我想在许多子程序中使用相同的类型,我应该在所有子程序中重复定义吗?

先感谢您.

编辑:解决方案是将类型的定义移动到另一个模块,然后use在每个子例程中移动到它.但是我不太喜欢这个解决方案,因为类型t_savepoint和子例程是同一个概念主题的一部分.

fortran interface user-defined-types

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

重载的fortran接口具有不同的排名

在Fortran模块中,我有一个函数,它接受一个数组及其名称,从数据库(实际调用C函数)获取数组的形状,将数组复制到临时缓冲区并将缓冲区传递给另一个处理的C函数它.此Fortran函数的整数数据名称为fs_WriteData_i,实数为fs_WriteData_f,双精度为f​​s_WriteData_d.所有这些功能不仅接受一维阵列,还接受2D,3D和4D阵列,并且它们完美地工作.以下是其中一个子程序的接口:

subroutine fs_WriteData_d(fieldname, data)
    use, intrinsic :: iso_c_binding
    implicit none

    real(c_double), dimension(*) :: data
    character                    :: fieldname*(*)

    ! ...

end subroutine fs_WriteData_d
Run Code Online (Sandbox Code Playgroud)

如果用户fs_WriteData_d('name', data)使用双精度数据调用,最多为4维数组,则此子例程执行该作业.

现在,问题是:我想提供一个名为fs_WriteData的通用重载接口,所以我使用了

interface fs_WriteData
    module procedure fs_WriteData_i, &
                     fs_WriteData_f, &
                     fs_WriteData_d
end interface fs_WriteData
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用:编译器声明如果用户只是调用它就找不到正确的实现fs_WriteData('name', data),这是因为与所有这些函数的排名不匹配.

是否有一种聪明的方法可以避免使用相同的内容编写所有fs_WriteData_d_1d,fs_WriteData_d_2d,...子例程,以使模块更易于维护?

提前谢谢了.

fortran overloading rank

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