小编Som*_*ing的帖子

为什么我不能在头文件中声明和分配全局变量,即使使用#ifndef HEADER_H也是如此

我看到了一些类似的问题,但在其中没有一个,#ifndef HEADER_H提到了.

我有一个头文件和2个C文件: constants.h main.c mylib.c

constants.h中:

#ifndef CONSTANTS_H
#define CONSTANTS_H

const int NUM_OF_ITEMS = 22;

#endif
Run Code Online (Sandbox Code Playgroud)

mylib.c中:

#include "constants.h"
... code ...
Run Code Online (Sandbox Code Playgroud)

main.c中:

#include "constants.h"

int main() {
    ... code ...
}
Run Code Online (Sandbox Code Playgroud)

当我使用命令编译时:gcc main.c mylib.c -o main,我收到以下错误:

/tmp/ccl55fv3.o:(.rodata+0x0): multiple definition of `NUM_OF_ITEMS'
/tmp/ccyZhu6F.o:(.rodata+0x0): first defined here
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
  • 我提到过#ifndef,为什么会这样?
  • 除了将它拆分constants.h为声明和constants.c作业外,还有什么可做的吗?

c gcc

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

SystemVerilog:如何在VCS模拟器中使用DPI调用连接C函数?

我有以下文件:

带有功能的C文件:

// funcs.c

#include <stdio.h>

void something() {
    printf("something\n");
    sayHello();
}
Run Code Online (Sandbox Code Playgroud)

系统verilog文件:

// hello_world.v

module kuku;
    export "DPI-C" function sayHello;
    import "DPI-C" function void something();
    initial something();
    function int sayHello ();
        $display("hello world");
        sayHello = 1;
    endfunction
endmodule
Run Code Online (Sandbox Code Playgroud)

如何编译它并使其工作,所以当我something()从SV 调用时,它将调用C函数,当我sayHello()从C 调用时,它将调用SV函数?

c system-verilog synopsys-vcs system-verilog-dpi

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

梯度下降与随机梯度下降算法

我尝试在MNIST手写数字数据集上训练前馈神经网络(包括60K训练样本).

我每次迭代所有训练样本,在每个时期对每个这样的样本进行反向传播.运行时当然太长了.

  • 我运行的算法名为Gradient Descent吗?

我读到,对于大型数据集,使用Stochastic Gradient Descent可以显着提高运行时间.

  • 我应该怎么做才能使用随机梯度下降?我是否应该随机选择训练样本,对每个随机挑选的样本进行反向传播,而不是我目前使用的时期?

machine-learning computer-vision neural-network gradient-descent

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

Python:如何将ARGV参数传递给另一个脚本?

我需要创建一个包装器脚本,该脚本从shell获取参数并将所有这些参数原样传递给另一个脚本.

在Perl中,我会这样做:

system("/path/to/subprocess", @ARGV);
Run Code Online (Sandbox Code Playgroud)

有没有办法在Python中做同样的事情?

python subprocess argv

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

HOG:在对比度归一化步骤中做了什么?

根据HOG过程,如用于人体检测的定向梯度直方图(参见下面的链接)中所述,对比度归一化步骤在分箱和加权投票之后完成.

我不明白 - 如果我已经计算了细胞的加权梯度,那么图像对比度的归一化现在如何帮助我呢?

据我了解,对比度归一化是在原始图像上完成的,而对于计算渐变,我已经计算了ORIGINAL图像的X,Y导数.因此,如果我将对比度标准化并且我希望它生效,我应该再次计算所有内容.

有什么我不太懂的东西吗?

我应该规范细胞的价值吗?

HOG中的标准化无论如何都不是关于对比度,而是关于直方​​图值(每个箱中的细胞计数)?

链接到该论文:http: //lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf

computer-vision

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

特征类取矩阵每行的平均值(计算列向量的质心)

我是C++的新手,但这就是我想要做的.我有一个4乘3矩阵:

100 109.523 119.096
100 89.7169  76.256
100 96.0822 103.246
100 101.084 85.0639
Run Code Online (Sandbox Code Playgroud)

我想计算每行的平均值并将其存储在某个向量中.我正在使用Eigen库.我无法想到有效地做到这一点.这是我到目前为止的代码:

MatrixXd SS(N,n+1);
    MatrixXd Z = generateGaussianNoise(N,n);
    for(int i = 0; i < N; i++){
        SS(i,0) = S0;
        for(int j = 1; j <= n; j++){
                SS(i,j) = SS(i,j-1)*exp((double) (r - pow(sigma,2.0))*dt + sigma*sqrt(dt)*(double)Z(i,j-1));
        }
    }

    cout << SS << endl;
    cout << endl;
    VectorXd S_A(3);
    S_A = SS.row(1);
Run Code Online (Sandbox Code Playgroud)

所以我所拥有的是一个4乘3矩阵SS,现在我想取每行的均值并将其存储在向量中S_A.我对此有很多困难,所以任何建议都会非常感激.

c++ eigen

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

C++:为全局类变量赋值

考虑类MyClass没有默认构造函数.

我想编写一个如下所示的代码:

MyClass instance;

void init_system() {
    instance = MyClass(parameters, of, the, constructor);
}
Run Code Online (Sandbox Code Playgroud)

我上面写的代码当然失败了,错误MyClass没有没有参数的C'tor.

有没有正确的方法,或者我必须实现一个解决方法,例如使用共享指针?

c++

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

nvcc:在运行时获取设备计算能力

我有一个使用 GPU 并在不同机器上运行的应用程序。-arch=compute_xx -code=sm_xx目前,我根据正在运行的计算机上安装的 GPU 型号,手动向 NVCC 指定参数。

我想编写一个自动化程序,能够从主机中提取这些值,这样我就不需要手动指定它们。有没有办法真正自动做到这一点?

cuda nvidia nvcc

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

Perl:如何将ARGV参数传递给另一个脚本?

我编写了一个启动另一个程序的Perl脚本,我希望它将收到的确切ARGV参数传递给已启动的程序.

目前我使用此代码:

my $cmd = "script.sh"
my $params_str = "";
foreach my $param (@ARGV) {
        $params_str .= " $param";
}

$cmd .= " " . $params_str;
system($cmd);
Run Code Online (Sandbox Code Playgroud)

但我担心以下情况会有问题:

>perl script.pl "param with spaces" param2 param3
Run Code Online (Sandbox Code Playgroud)

因为它将调用我$cmd的第一个参数分为3个参数,因为引号将被删除:param with spaces param2 param3

是否有一种优雅的方式来正确传递参数?

parameters perl system call argv

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

C++ - 在 std::thread 中调用重载函数时编译失败

考虑以下场景:

// utils.h

#include <string>
#include <list>

namespace Utils {
    void do_something(int a, std::list<int> *b);
    void do_something(int a, std::list<std::string> *b);
};
Run Code Online (Sandbox Code Playgroud)

// utils.cpp

#include "utils.h"

void Utils::do_something(int a, std::list<int> *b) {

}

void Utils::do_something(int a, std::list<std::string> *b) {

}
Run Code Online (Sandbox Code Playgroud)

// main.cpp

#include <thread>
#include <list>
#include "utils.h"

int main() {
    std::list<int> list;
    std::thread t(Utils::do_something, 17, &list);
    t.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我收到以下错误:

error: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>, int, std::list<int>*)'
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?在我添加 get 的重载函数之前std::list<std::string>*,它确实编译得很好。

c++

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