小编cha*_*com的帖子

如何取消导入已导入的python模块?

我对NumPy/SciPy很新.但是现在,我已经开始非常积极地使用它进行数值计算,而不是使用Matlab.

对于一些简单的计算,我只是在交互模式而不是编写脚本.在这种情况下,是否有任何方法可以不导入已导入的某些模块?当我编写python程序时可能不需要unimporting,但在交互模式下,它是需要的.

python python-import

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

在标题中用作函数参数的"原始"类型前面删除"const"是否更好?

在代码审查过程中,我的一位同事向我提到,在标题中用作函数参数的"原始类型"前面的"const"是没有意义的,他建议删除这些"const".在这种情况下,他建议仅在源文件中使用"const".原始类型表示诸如"int","char","float"等类型.

以下是示例.

example.h文件

int ProcessScore(const int score);
Run Code Online (Sandbox Code Playgroud)

example.cc

int ProcessScore(const int score) {
  // Do some calculation using score
  return some_value;
}
Run Code Online (Sandbox Code Playgroud)

他的建议如下:

example.h文件

int ProcessScore(int score);  // const is removed here.
Run Code Online (Sandbox Code Playgroud)

example.cc

int ProcessScore(const int score) {
  // Do some calculation using score
  return some_value;
}
Run Code Online (Sandbox Code Playgroud)

但我有点困惑.通常,用户只会查看标题,因此如果标题和源文件之间存在不一致,则可能会导致混淆.

有人可以给出一些建议吗?

c++ const header primitive-types

48
推荐指数
4
解决办法
4875
查看次数

键入字符串时带有cin的无限循环,而数字是预期的

在下面的循环中,如果我们输入字符作为cin输入而不是预期的数字,那么它将进入无限循环.有人可以向我解释为什么会这样吗?

当我们使用时cin,如果输入不是数字,那么有没有办法检测到这一点以避免上述问题?

unsigned long ul_x1, ul_x2;

while (1)
{
  cin >> ul_x1 >> ul_x2;
  cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ validation cin infinite-loop

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

Chai Library中的equal和eql有什么区别

我对Javascript很新,我对Chai库进行单元测试有一个简单的问题.

当我在Chai库上研究一些材料时,我看到一个声明说"等于目标严格等于(===)到值"和eql"断言目标与值非常相等.".

但我对于严格和深刻的差异感到困惑.

javascript unit-testing chai

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

NumPy中astype的有效参数

我是NumPy和SciPy的新手.与Matlab不同,似乎NumPy中的每个数组都有一个数据类型.

假设我们有一个整数数组x:

import numpy as np
x = np.array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

如果我想将数组转换为float,那么它似乎如下工作:

y1 = x.astype('float64')  # Works!
y2 = x.astype('float_')   # Works!
y3 = x.astype('float')    # Works!
Run Code Online (Sandbox Code Playgroud)

但是我有点不好意思看到以下内容也可以在没有单引号的情况下工作.

y4 = x.astype(float)      # Still works!!
Run Code Online (Sandbox Code Playgroud)

但是对于用于y1和y2的其他表达式,如果我省略单引号,则它不起作用:

y5 = x.astype(float64)  # Doesn't work.
y6 = x.astype(float_)   # Doesn't work.
Run Code Online (Sandbox Code Playgroud)

所以,我有点困惑为什么y4工作,但y5和y6导致错误.有人可以启发我这个吗?

python arrays types numpy

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

使用重置初始化unique_ptr是一个坏习惯吗?

当我需要一个std :: unique_ptr类型的数据成员时,我通常使用std :: unique :: reset来用一个新对象初始化这个unique_ptr.

以下是一个简化示例:

class A {
 public:
  void SetValue(int x) {
    data_.reset(new B(x));
  }

 private:
  std::unique_ptr<B> data_;
};
Run Code Online (Sandbox Code Playgroud)

在代码审查中,一位评论者提到这是一个坏习惯,他要求我尽可能不使用重置.相反,他建议使用以下方法:

std::make_unique
Run Code Online (Sandbox Code Playgroud)

或模板函数如下:

template <typename T>
struct MakeUniqueResult {
  using scalar = std::unique_ptr<T>;
};
template <typename T, typename... Args>
typename internal::MakeUniqueResult<T>::scalar
MakeUnique(Args&&... args) {  
  return std::unique_ptr<T>(
      new T(std::forward<Args>(args)...));  
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下是否有一些特殊原因可以避免使用std :: unique_ptr :: reset?

c++ unique-ptr c++14

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

Matlab fft 和 Scipy fft 的 FFT 结果略有不同

我一直在做一个程序,它使用 NumPy/Scipy 测量两个光谱之间的相位差。

我已经有了用 Matlab 编写的例程,所以我基本上使用 NumPy 重新实现了该函数和相应的单元测试。但是,我发现单元测试失败是因为scipy.fftpack.fft引入了一些小的数值错误:

import numpy as np
import scipy.fftpack.fft
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0])
X = scipy.fftpack.fft(x)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于时域信号是对称的,因此预期输出为

[16.0000   -6.8284         0   -1.1716         0   -1.1716         0   -6.8284]
Run Code Online (Sandbox Code Playgroud)

如以下Matlab代码所示:

>> x = [0.0, 1.0, 2.0, 3.0, 4.0, 3.0, 2.0, 1.0];
>> X = fft(x)

X =

   16.0000   -6.8284         0   -1.1716         0   -1.1716         0   -6.8284
Run Code Online (Sandbox Code Playgroud)

根据 DSP 理论,结果不应包含任何虚部。但是,scipy 结果如下:

array([ 16.00000000 +0.00000000e+00j,  -6.82842712 -2.22044605e-16j,
         0.00000000 -0.00000000e+00j,  -1.17157288 -2.22044605e-16j,
         0.00000000 …
Run Code Online (Sandbox Code Playgroud)

precision matlab numpy fft scipy

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

我可以在 python 交互模式下有多个 matplotlib 绘图窗口吗?

我已经使用 Matlab/octave 很长时间了,我正在过渡到 NumPy/SciPy。我发现matplotlib与Matlab中的图形绘制非常相似,并且易于使用。

但是,我对 matplotlib 感到不舒服的一件事是,当我使用 绘制图形时plt.show(),过程会卡在那里,因此我无法键入任何新命令,也无法在关闭该窗口之前启动另一个窗口来绘制另一个图形。例如,如果我们键入以下代码,则在关闭此窗口之前,我们不能键入任何新命令,也不能为另一个绘图启动另一个窗口。

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
Run Code Online (Sandbox Code Playgroud)

这种行为与 Matlab 绘图非常不同。在 Matlab 交互模式下,我们可能有多个图形窗口。

我们可以在python交互模式下做同样的事情吗?

python matlab plot numpy matplotlib

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

python中是否有类似于“perl -pe”选项的东西?

TL;DR 我想知道什么是 Python 中的选项,它可能大致对应于 Perl 中的“-pe”选项。

我曾经使用 PERL 有一段时间了,但是最近,我已经转向 PYTHON,因为它的易用性和简单性。当我需要在 shell 提示符下进行简单的文本处理时,我使用了 perl -pe 选项。下面是一个例子。

grep foo *.txt | perl -pe 's/foo/bar/g'
Run Code Online (Sandbox Code Playgroud)

要在 Python 中做类似的事情,有人可以向我解释我如何做到这一点吗?

python shell

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

在pyreverse生成的类图中隐藏成员变量

我使用pyreverse 从Python 代码创建类图。默认情况下,它显示成员变量和方法。但通常情况下,我只想看看方法。

如果使用 -k 选项,那么它将禁用成员变量和方法,所以我想知道如何仅禁用成员变量。

uml class-diagram pylint pyreverse

5
推荐指数
0
解决办法
384
查看次数