小编pat*_*rik的帖子

对于Matlab中的向量,uint64并不精确

我发现uint64在Matlab中使用向量时存在不一致性.似乎uint64的数组并不是所有64位的精确数组.这没有给出我预期的输出,

p=uint64([0;0]);
p(1)=13286492335502040542
p =
 13286492335502041088
                    0
Run Code Online (Sandbox Code Playgroud)

然而

q = uint64(13286492335502040542)
q =
 13286492335502040542
Run Code Online (Sandbox Code Playgroud)

确实.它也在使用

p(1)=uint64(13286492335502040542)
p =
 13286492335502040542
                    0
Run Code Online (Sandbox Code Playgroud)

使用无符号整数,人们期望一种特殊的行为,通常也是完美的精度.这看起来很怪异甚至有点不可思议.我没有用较小的数字看到这个问题.也许有人知道更多?我不认为这是一个未知的问题,所以我想必须有一些解释.我很高兴知道为什么会发生这种情况以及什么时候能够避免它.像往常一样,文档中没有提到这种问题.

Matlab 2014a,Windows 7.

编辑

值得一提的是,在直接定义数组时,我可以看到相同的行为.

p=uint64([13286492335502040542;13286492335502040543])
p =
 13286492335502041088
 13286492335502041088
Run Code Online (Sandbox Code Playgroud)

这就是我问这个问题的根本原因.我很难看到这种情况的解决方法.

matlab

8
推荐指数
2
解决办法
204
查看次数

如何在想法中使用断点条件?

我已经来回试了很长时间,但不知何故它不起作用.

在此输入图像描述

我也尝试过分号和不分号.我也尝试在断点之前运行这一行,以确保条件真正起作用,

logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());
Run Code Online (Sandbox Code Playgroud)

它按预期返回13.

有谁知道如何让这个工作?

编辑

根据要求,我将在断点处添加运行的代码行,

logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());
Trap trap = Trap.createTrapFrom(variableMap, instanceIdentificationNumber); // Breakpoint in margin on this line.
Run Code Online (Sandbox Code Playgroud)

编辑2

问题似乎与IDEA随机错过一些断点有关.我也尝试了一些无条件断点(应该总是停止),这些断点只在特定时间停止.

java intellij-idea

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

如何使用枚举初始化矢量/数组?

我想知道是否有一些方法来使用枚举初始化向量.枚举是必要的,因为我正在创建一个对象的矢量(相同的类,Chess_piece,但不同的类型).我希望能够在没有大量测试的情况下访问该元素(if (this is white pawn 8)...).枚举可用于以漂亮的方式逐项列出vec(W_PAWN8)....无论如何,当我创建矢量时,我会做这样的事情(伪代码)

//generate enum of pieces
enum pieceList{
...
} pieceEnum;
vector<int> pieceIter = {W_PAWN1,W_PAWN2,...}; //equal to {1,2,...}
//board index goes from lower left to upper right
vector<int> boardIdx = {8,9,10,11,12,13,14,15,16,1...};
vector<Piece*> pieceVec;
for (int i=0; i<32; i++)
    pieceVec.pushback( new Piece( boardIdx(i), pieceIter(i) ) );
Run Code Online (Sandbox Code Playgroud)

但是,现在我实际上写了两次相同的东西.当我创建枚举和pieceIter.对于这个程序,我可以忍受它,但我可能不止一次有同样的问题.

这就是我想知道它存在vector<int> pieceIter {pieceEnum};于c ++中的原因吗?上一句中的代码片段当然是无效的,但我认为它提示我的问题,使用枚举中的所有变量并以简单的方式初始化向量?

如果没有,是否可以在matlabl中使用某种"范围初始化",例如:

vector<int> vec {1:32};
Run Code Online (Sandbox Code Playgroud)

但是用c ++语法?

c++ enums vector

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

删除matlab中的路径和子路径

我一直在寻找一种从matlab中删除一堆路径的简单方法.我正在使用一个相当大的程序,它在其目录中包含许多路径.我也使用svn版本处理,我使用了许多分支,它们通常包含一些相同的功能,一些被修改,一些只存在于一个分支上.

问题是,当我为一个分支设置路径(使用自定义函数),然后想要将目录更改为另一个路径时,第一部分很烦人删除.我用过

rmpath(path1,path2,...);
Run Code Online (Sandbox Code Playgroud)

但是,这需要手动键入每个路径.因为我想知道所有路径都有一个共同的基本目录,无论如何使用通配符从路径中删除整个目录?我用的是Windows机器.

svn windows matlab path

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

Matlab报告"线程中的异常"AWT-EventQueue-0"java.lang.NullPointerException"

您想知道在matlab中重复出现的java错误.它通常发生在matlab使用java做一些繁重的事情时.例如,这可以是按住ctrl + z或ctrl + y.

在复制之前我错误地删除了错误消息,但我认为我可以通过任何方式传递问题的核心.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
...
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会出现这种错误?我从matlab r2007中找到了一些关于这个的信息,这是因为java swing是线程不安全的,并且matlab缺乏支持来确保线程安全.但是,这应该在matlab r2008b中修复.那我为什么现在就拿到它呢?

编辑 这是完整的堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.netbeans.editor.BaseDocument.notifyUnmodify(BaseDocument.java:1465)
at org.netbeans.editor.BaseDocument.notifyModifyCheckEnd(BaseDocument.java:816)
at org.netbeans.editor.BaseDocumentEvent.redo(BaseDocumentEvent.java:336)
at javax.swing.undo.UndoManager.redoTo(Unknown Source)
at javax.swing.undo.UndoManager.redo(Unknown Source)
at com.mathworks.mwswing.undo.MUndoManager.redo(MUndoManager.java:255)
at org.netbeans.editor.ActionFactory$RedoAction.actionPerformed(ActionFactory.java:767)
at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:259)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at com.mathworks.widgets.SyntaxTextPaneBase.processKeyEvent(SyntaxTextPaneBase.java:1187)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at …
Run Code Online (Sandbox Code Playgroud)

java matlab nullpointerexception

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

在matlab中监视内存

我一直在寻找一种监控matlab内存消耗的方法,但一直无法做到.我感兴趣的是内置函数的峰值内存,并且无法使用matlab分析器进行测量,因为这些函数已经编译完毕.

在matlab中很少记录峰值内存问题,这意味着要找出问题所在,我需要自己监视内存使用情况.我已经尝试在Windows中使用资源管理器,但我找不到任何问题.我可能认为没有问题,但也可能意味着采样率很低.我用的是Windows 7.

这个问题可能与matlab无关,但由于我在matlab中遇到问题,我会将其标记出来.

windows matlab

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

是否所有图形对象都必须从JPanel继承?

我有一个关于Java Swing和JPanel的问题.我可以说我是一个没有经验的Java程序员,但对编程并不是全新的.

我的问题是我有一个叫做的课RandomParticle,

public class RandomParticle extends Ellipse2D.Double {

    private Ellipse2D.Double circle;

    public RandomParticle(double xPos , double yPos,double rad) {
        setCircle(new Ellipse2D.Double(xPos, yPos, rad, rad));
    }

    public Ellipse2D.Double getCircle() {
        return circle;
    }

    public void setCircle(Ellipse2D.Double circle) {
        this.circle = circle;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在屏幕上移动(当然是在JFrame中).粒子是一个默认对象,只是为了获取图形.然而,在许多地方,例如在这里,可以说,为了能够绘制圆圈,它必须覆盖paintComponentJPanel中的方法.确实合理的是,要在JFrame中绘制内容,它必须是JPanel.但是,这可能会导致麻烦,因为Java不支持多重继承.

在这种情况下,我真的不需要RandomParticle成为ellipse2D的孩子,但随着我的类变得越来越复杂,我很可能需要在某些时候从其他类中固有.但是,我觉得这个级别的问题对于SO来说是一个很好的部门,因为它不需要我的程序的任何具体知识.所以我想知道的是:是否有可能在没有班级成为JPanel的孩子的情况下画一个圆圈?

java swing

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

awk 中数组数组的排序与多维数组的排序有何不同?

我已经解决了列出一组项目的问题,这些项目具有组件,而这些组件又具有 awk 中的属性。

我试图以两种方式解决这个问题。

1) 定义一个数组list[item-number,component-number][properties].
2) 定义一个数组list[item-number][component-number][properties].

这在很多方面都很有趣,因为我注意到 (2) 保持插入顺序,而 (1) 没有。我知道数组在 awk 中是关联的,这很可能是巧合。但是,由于插入顺序在我的情况下很重要(而且,我想了解更多关于 awk 的信息),我想知道这是否会发生以及为什么会发生。

有任何想法吗?BR 帕特里克

awk

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

如何解决 Element compilerArgs is not allowed here Maven 编译器插件中的错误?

我正在使用 Maven 编译器插件 3.0,但出现错误“此处不允许使用 Element compilerArgs”。这似乎适用于命令行,但我在 IDE 中收到此错误。我使用 IDEA 2017.2 社区版。某处可能缺少一些架构,但我不确定。有没有人有解决此类问题的好方法,即不向 JetBrains 发送错误报告并等待修复?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <fork>true</fork>
        <compilerArgs>
            <arg>-DspecificArg</arg>
        </compilerArgs>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

java maven-compiler-plugin intellij-idea2017

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

如何在 (g)awk 中使用 eval 语句?

由于 awk 似乎没有回调,我打算为此使用 eval 语句。所以我查看了 GNU 用户指南,

https://www.gnu.org/software/gawk/manual/html_node/Viewing-And-Changing-Data.html

然后写了这个简单的脚本。

BEGIN {
    args[1]="\"a\""
    args[2]="\"b\""
    args[3]="\"c\""
    args[4]="\"\""
    run_callback("printargs",args)
    print args[4]
}
function run_callback(callback,args)
{
    nargs=length(args)
    if (nargs>0)
    {   
        argstring=args[1]
        for (argn=2;argn<=nargs;argn++)
        {
            argstring=argstring","args[argn]
        }
    }   
    callbackstr = callback"("argstring")"
    print callbackstr
    eval callbackstr
}
function printargs(arg1,arg2,arg3,res)
{
    res=arg1","arg2","arg3
    print "res="res
}
Run Code Online (Sandbox Code Playgroud)

但是,打印输出不是我所期望的。我明白了,

[~]-> gawk -f callback.awk
printargs(a,b,c,"")
""
Run Code Online (Sandbox Code Playgroud)

而不是预期的,

[~]-> gawk -f callback.awk
printargs(a,b,c,"")
res=a,b,c
"Not sure what is supposed to be here, but it is not relevant."
Run Code Online (Sandbox Code Playgroud)

感觉好像在 eval 语句中没有实际发生任何事情。有谁知道这里发生了什么?

gawk 版本是 …

awk

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