小编and*_*sdr的帖子

调用pyplot.show()后保存图形会产生一个空文件

以下示例代码生成一个简单的图,然后将其保存到'fig1.pdf',然后显示它,然后再将其保存到'fig2.pdf'.第一个图像看起来像预期的那样,但第二个图像是空白的(包含一个白色方块).这里到底发生了什么?这条线plt.show()明显混乱,但我无法弄清楚是什么/如何!

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y = x**2
plt.plot(x,y)
plt.savefig('fig1.pdf')
plt.show()
plt.savefig('fig2.pdf')
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

System.nanoTime()的精度与准确度

文件System.nanoTime()说明如下(强调我的).

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关.返回的值表示纳秒,因为某些固定但是任意时间(可能在将来,因此值可能为负).该方法提供纳秒精度,但不一定是纳秒精度.不保证值的变化频率.

在我看来,这可以用两种不同的方式解释:

  1. 上面粗体的句子是指个人返回值.然后,从数值意义上理解精度和准确度.也就是说,精度指的是有效数字的数量 - 截断的位置,精确度是指数字是否正确(如前面的答案 中所述,'精确'和'准确度'之间有什么区别?)

  2. 上面粗体的句子指的是方法本身的能力.然后,精确度和准确性将被理解为飞镖类比(http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy).因此,低精度,高精度=>错误的值被高精度地反复击中:想象物理时间静止不动,nanoTime()的连续调用返回相同的数值,但是它与实际经过的时间有关.参考时间通过一些常数偏移.

哪种解释是正确的?我的观点是,解释2意味着使用nanoTime()(通过减去两个返回值)测量时间将是正确的纳秒(因为测量中的常数误差/偏移将被消除),而解释1将不会不能保证测量之间的一致性,因此不一定意味着高精度的时间差测量.


2013年 4月15日更新: Java 7文档System.nanoTime()已更新,以解决可能与以前的措辞混淆.

返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位.

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关.返回的值表示纳秒,因为某些固定但任意的原始时间(可能在将来,因此值可能为负).在Java虚拟机的实例中,此方法的所有调用都使用相同的原点; 其他虚拟机实例可能使用不同的来源.

这种方法提供纳秒级精度,但不一定是纳秒级分辨率(即,值的变化频率) - 除了分辨率至少与分辨率一样好之外,不做任何保证currentTimeMillis().

跨越大于约292年(2 63纳秒)的连续调用的差异将无法正确计算由于数值溢出而导致的经过时间.

仅当计算在Java虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义.

java nanotime

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

如何让PyCharm中的Python控制台访问脚本的变量空间?

我正在寻找一种方法来在PyCharm中提供Python控制台(可从Tools- > Run Python Console...获取)访问由我正在使用的脚本定义的变量.

例如,假设我的脚本(PyCharm项目的一部分)包含该行

aa = 4
Run Code Online (Sandbox Code Playgroud)

然后我想直接进入控制台并操纵刚刚由脚本定义的变量,例如

>>> aa*2
8
Run Code Online (Sandbox Code Playgroud)

我找不到办法做到这一点,相关的问题 是否有一个PyCharm的变量资源管理器 没有帮助我:接受的答案似乎暗示控制台实际上应该有权访问当前的变量空间工作区/脚本,但在我的情况下不是这样.

(作为旁注:上面的其他IDE除了PyCharm之外还有其他的可能:PyScripter.它也是我习惯在MATLAB中工作的方式.)

python console pycharm

18
推荐指数
3
解决办法
5926
查看次数

在 Linux 上构建可嵌入(最小)Python 发行版

Python 3.5.0 版本引入了嵌入式发行版适用于 Windows 的最小 Python 发行版,旨在与以某种方式(例如通过嵌入)使用 Python 的其他软件捆绑在一起。这样可以精确控制嵌入 Python 的应用程序使用哪个版本的 Python(这对我来说至关重要)。

在 Linux 中如何实现这一点呢?我的猜测是,我可以从源代码构建 Python,使用它make altinstall来构建到特定目录的独立发行版,然后在发布时将该目录与我的应用程序捆绑在一起。但是是否有更好的方法(例如特定的编译标志)来专门构建最小发行版,即 Windows 的可嵌入发行版的对应版本?

linux software-distribution python-3.x

6
推荐指数
0
解决办法
1301
查看次数

为什么Eclipse调试器似乎没有理由地给出"Source not found"错误?

当我在Eclipse中调试时,经常发生调试器崩溃,显示错误消息"Source not found"(在其下面是一个带有"Edit Source Lookup Path"文本的按钮).我之前在网上搜索过这个问题的解释/解决方案,但对我没有任何帮助.

但是,我现在已经弄清楚在我的情况下发生了什么:逐行逐步执行代码,然后逐步退出运行代码块时出现错误.我不知道术语,但我猜许多应用程序可能会在某些时候进入"待机模式",其中没有任何代码当前正在运行.一个示例是等待鼠标单击的图形应用程序.在MouseListener方法中停止断点,然后退出它(进入"待机模式")将导致我的错误.

我在这个问题的底部提供了一个MWE.当我在该行放置断点时发生错误

System.out.println("You clicked!");
Run Code Online (Sandbox Code Playgroud)

并使用F6逐步退出方法("Step Over").如果我在侦听器的最后一行按F8("Resume")而不是F6,调试器不会崩溃,一切都很好.

我的问题是:为什么Eclipse在这种情况下会做一些如此严重的崩溃?据我所知,源代码中没有一行可以说程序控件在下面的示例中离开监听器后可以说"步入",但为什么不进入"待机模式"而不抱怨?我可以以某种方式停用此错误,以防止我的调试会话经常遇到不合时宜的结束吗?或者我只需要记住按F8而不是F6,后者会导致崩溃?

package app;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class TestFrame extends JFrame {
    public TestFrame() {
        getContentPane().setPreferredSize(new Dimension(200, 200));
        getContentPane().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("You clicked!");
            }
        });
        pack();
    }

    public static void main(String[] args) {
        JFrame testFrame = new TestFrame();
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        testFrame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

java eclipse debugging

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

列表推导:在调试模式和正常运行时中与范围不同的行为

考虑以下:

def f():
    a = 2
    b = [a + i for i in range(3)]
f()
Run Code Online (Sandbox Code Playgroud)

这没有问题.据我了解(请纠正我,如果我错了),列表推导表达式引入了一个新的范围,但由于它是在一个函数内创建的(而不是一个类),它可以访问周围范围,包括变量a.

相反,如果我要进入调试模式,请在上面的第3行停止,然后在解释器中手动编写以下内容

>>> b = [a + i for i in range(3)]
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Traceback (most recent call last):
  File "<string>", line 293, in runcode
  File "<interactive input>", line 1, in <module>
  File "<interactive input>", line 1, in <listcomp>
NameError: global name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)

为什么是这样?当我在调试模式下停在给定的行时,是否可以访问与运行时相同的范围?

(顺便说一下,我正在使用PyScripter)

python scope list-comprehension python-3.x

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

如何避免重载构造函数中的代码重复?

假设我有一个接受输入的构造函数和另一个使用默认值的构造函数.然后,两个构造函数都以完全相同的方式继续处理这些数据.(以下示例.)在这种情况下,我有哪些选择可以避免代码重复?

(我已经阅读了如何减少构造函数重载代码的帖子,最佳答案建议使用关键字"this".在我的情况下,我想我需要使用"this"从第二个调用第一个构造函数输入存储之后的一个.但是这会导致编译错误:"调用this必须是构造函数中的第一个语句".)

示例代码:

public class A {
  public A(String a) {
    //process a
  }
  public A() {
    String a = "defaultString";
    //process a
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我在类构造函数中使用输入对话框调用需要大量的工作(我知道这不是很好的做法).所以我已经改变了代码示例,以引导讨论远离这个:).

java overloading code-duplication

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

numpy.gradient()似乎产生错误的边界值(使用第一个差异)

关于如何计算边界(开始和结束)值(我知道它使用第一个差异,而中心值使用中心差异计算),函数numpy.gradient()(numpy 1.9.0)似乎存在问题. ).例如,考虑以下示例:

import numpy as np
arr = np.array([1, 2, 4])
arrgrad = np.gradient(arr)
Run Code Online (Sandbox Code Playgroud)

我希望在这里arrgrad获得价值

[ 1.   1.5  2. ]
Run Code Online (Sandbox Code Playgroud)

arrgrad[0] = (2-1)/1 = 1
arrgrad[1] = (4-1)/2 = 1.5  
arrgrad[2] = (4-2)/1 = 2
Run Code Online (Sandbox Code Playgroud)

但我得到了结果

[ 0.5  1.5  2.5]
Run Code Online (Sandbox Code Playgroud)

从版本1.8.1(从https://github.com/numpy/numpy/blob/v1.8.1/numpy/lib/function_base.py获得)的numpy.gradient()行为似乎产生了正确的结果,但是.

上面描述的错误行为是否是错误的结果?(我使用的是Python 3.4.2,64位.)

python numpy

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

为什么在涉及 += 运算符的同一表达式中使用可变引用和不可变引用有时似乎是允许的,有时却是不允许的?

在下面的代码示例中,我试图以四种不同的方式通过a对结构X的可变引用来增加结构的成员变量。在这里,编译器为由 表示的行给出以下错误B

error[E0502]: cannot borrow `*x` as immutable because it is also borrowed as mutable
  --> src\main.rs:17:23
   |
17 |     *x.get_a_mut() += x.get_a(); //B DOESN'T COMPILE
   |     ------------------^--------
   |     ||                |
   |     ||                immutable borrow occurs here
   |     |mutable borrow occurs here
   |     mutable borrow later used here
Run Code Online (Sandbox Code Playgroud)

如果是使用可变和不可变的参照问题a在同一个表达式,为什么CD编译?

struct X {
    a: i64,
}

impl X {
    pub fn get_a_mut(&mut self) -> &mut i64 {
        return &mut …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

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

如何在编辑器中搜索变量名称?

在函数中,当函数结束之前或变量被覆盖之前未随后使用已定义的变量时,MATLAB编辑器会显示警告.这显然告诉我编辑器有一种在代码中搜索给定变量的方法.

我可以手动完成吗?Find函数在这里显然受到限制,因为它只搜索编辑器窗口中的文本正文(包括注释)以搜索字符串的匹配.这使得在搜索具有短名称的变量(例如我常用的"a")时非常不方便.

variables search matlab variable-names

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

为什么applet中允许使用非静态方法?

我注意到在java-application中向包含main方法的类添加一个非静态方法然后在main-method中调用它会导致编译错误.我可以理解,因为这个类永远不会被实例化.

但是,将一个非静态方法添加到Applet类并从内部调用它,比如paint方法可以正常工作.为什么是这样?小程序类是以某种方式由appletviewer实例化的,还是有另一种解释为什么前者不被允许而后者是?

java static-methods appletviewer

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

pygame绘图功能留下像素宽的间隙.为什么?

在将一段代码(动画一种矩形模式)从Java转换为Python之后,我注意到代码生成的动画看起来非常糟糕.我设法用一个最小的例子重现问题,如下所示:

import pygame
SIZE = 200
pygame.init()
DISPLAYSURF = pygame.display.set_mode((SIZE, SIZE))
D = 70.9
xT = 0.3
yT = 0
#pygame.draw.rect(DISPLAYSURF, (255,0,0),     (0, 0, SIZE, SIZE))
pygame.draw.rect(DISPLAYSURF, (255,255,255), (xT,   yT,   D, D))
pygame.draw.rect(DISPLAYSURF, (255,255,255), (xT+D, yT+D, D, D))
pygame.draw.rect(DISPLAYSURF, (0,0,0),       (xT,   yT+D, D, D))
pygame.draw.rect(DISPLAYSURF, (0,0,0),       (xT+D, yT,   D, D))
pygame.display.update()
Run Code Online (Sandbox Code Playgroud)

此代码生成以下图像:

请注意,正方形在中间没有完美排列.取消注释上面代码中的注释行会产生以下图像,这可以进一步说明问题:

似乎在黑白模式中存在像素宽的间隙,即使在代码中可以看到(通过调用pygame.draw.rect()中传递的数据),这不应该是案子.这种行为的原因是什么,我该如何解决?

(这不是在Java中发生的,这里是一段与上面的Python代码相对应的Java代码).

python pygame draw

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