标签: edt

scipy distance_transform_edt函数如何工作?

https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.morphology.distance_transform_edt.html

我无法理解欧几里德距离变换函数在Scipy中是如何工作的.据我所知,它与Matlab函数(bwdist)不同.作为一个例子,输入:

[[ 0.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.]]
Run Code Online (Sandbox Code Playgroud)

scipy.ndimage.distance_transform_edt函数返回相同的数组:

[[ 0.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.]]
Run Code Online (Sandbox Code Playgroud)

但matlab函数返回:

1.4142    1.0000    1.4142    2.2361    3.1623
1.0000         0    1.0000    2.0000    2.2361
1.4142    1.0000    1.4142    1.0000    1.4142
2.2361 …
Run Code Online (Sandbox Code Playgroud)

python matlab edt scipy

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

为什么应该在 EDT 线程外调用 SwingUtils.invokeAndWait() 方法?

编辑:我已经提到了这个链接,我能够理解 InvokeLater 的代码流。我的问题是,为什么这种逻辑以这种方式实现?有什么具体原因吗?


以下是我的代码:

  private void init() 
    {
    JFrame jfr = new JFrame();
    jfr.setSize(500, 500);
    jfr.setVisible(true);
    jfr.setTitle("Test");


    JButton jb = new JButton("Ok");
    jfr.add(jb);

    jb.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            try 
            {
                SwingUtilities.invokeAndWait(new Runnable() 
                {
                    @Override
                    public void run() 
                    {
                        System.out.println("hello");
                    }
                });
            } 
            catch (Exception e1) 
            {
                e1.printStackTrace();
            } 
        }
    });
Run Code Online (Sandbox Code Playgroud)

第一个问题(使用时InvokeAndWait):

为什么它以这样一种方式实现,即InvocationTargetException在 EDT 线程中调用时会抛出一个?

第二个问题(使用时InvokeLater):

为什么 InvokeLater 允许这样做?

好吧,这是我对 EDT 线程的基本理解:

调用和等待

  • 将作业 F …

java swing multithreading edt

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

如何在不阻止EDT的情况下等待EDT中的对象创建?

我在Java库中使用API​​,它从事件派发线程调用,并要求我返回一个完全初始化的UI组件.它看起来像这样:

public JDialog createDialog();
Run Code Online (Sandbox Code Playgroud)

但是我只能在从数据库加载后填充对话框,有时可能需要10秒.通常我会在后台线程中执行此操作,但由于此方法是从EDT调用的,因为我必须返回对话框,这将无效.这是第三方库,所以我无法改变方法,但有什么办法可以避免阻止EDT吗?

java concurrency swing edt swingworker

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

从使用toLocaleString()通过javascript返回的日期中删除"EDT"的最佳方法

我是javascript的新手,所以这可能是一个非常简单的问题.在使用toLocaleString返回的日期之后,是否有一种简单的方法可以阻止'EDT'打印?谢谢!

javascript formatting date edt

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

TreeSet表现得很奇怪

我遇到了TreeSet(sortedNodes)和ArrayList(nodes)的奇怪问题.在我的程序中,我有一个从Event Dispatch Thread(from ActionListener)这些行调用的方法:

        System.out.println("nodes: "+nodes.size());
        sortedNodes.addAll(nodes);
        System.out.println("sortedNodes: "+sortedNodes.size());
Run Code Online (Sandbox Code Playgroud)

问题是,在某些集合上sortedNodes.size()返回的数字低于nodes.size()(在这3行上,因此内容没有变化nodes).当我打印内容时sortedNodes,除了不包含它应该包含的所有对象之外,它甚至没有排序.奇怪的是 - 如果我再次调用整个方法,它就解决了这个问题.我没有得到它 - 在相同的集合上执行相同的代码,但第一次它不起作用,第二次它没有.有任何想法吗?

编辑:如果我的问题不是很清楚,这应该有所帮助

exportTree();
exportTree();
Run Code Online (Sandbox Code Playgroud)

pritns on output this:

nodes: 7
sortedNodes: 4
b2[23,57]a[46,97]b[65,77]c[43,43]

nodes: 7
sortedNodes: 7
a[46,97]b[65,77]b1[55,89]b2[23,57]b3[20,20]c[43,43]c1[99,88]
Run Code Online (Sandbox Code Playgroud)

比较:

public class NodeComparator implements Comparator<Node>{
    public int compare(Node o1, Node o2) {
        return o1.getLabel().compareTo(o2.getLabel());
    }
}
Run Code Online (Sandbox Code Playgroud)

节点:

public class Node {

private int order;
private String label;
private Integer[] keys;
private Node[] pointers;
private Node …
Run Code Online (Sandbox Code Playgroud)

java collections edt

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