小编GRo*_*tar的帖子

在列表序言中创建数字组合

我正在PROLOG(有限制)开发一个程序,它应该在某些限制内输出6个数字的组合.

该列表必须具有从1到4的数字,因此将重复2个其他数字.这是可能具有从1到4.

Possible examples:     Wrong examples:
1,2,3,4,1,1            1,2,3,2,3,3 //Missing #4
1,3,2,1,4,4            4,3,2,4,2,3 //Missing #1
1,2,3,3,2,4
4,1,3,2,1,4
Run Code Online (Sandbox Code Playgroud)

为了完成这项工作,我创建了一些限制,如下所示:

Numbers = [A1, A2, A3, A4, A5, A6]
nCr(6,4) = 15 restrictions
A1 =\= A2 =\= A3 =\= A4 OR
A1 =\= A2 =\= A3 =\= A5 OR
Etc.
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止开发的代码:

make

pred(Numbers) :-

       Numbers = [A1, A2, A3, A4, A5, A6],
       domain(Numbers, 1, 4),

       %restrictions
       all_different([A1,A2,A6,A3]) #\/    %A1 =/= A2 =/= A6 =/= A3
        all_different([A1,A2,A6,A4]) …
Run Code Online (Sandbox Code Playgroud)

algorithm constraints prolog clpfd

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

Dask数据框中的多个聚合用户定义函数

我正在使用Dask处理数据集(考虑到它不适合存储在内存中),并且我想根据列及其类型使用不同的汇总函数对实例进行分组。

Dask具有一组用于数字数据类型的默认聚合函数,但不适用于字符串/对象。有没有一种方法可以实现类似于以下示例的用户定义的字符串聚合函数?

atts_to_group = {'A', 'B'}
agg_fn = {
  'C': 'mean'  #int
  'D': 'concatenate_fn1'  #string - No default fn for strings - Doesn't work
  'E': 'concatenate_fn2'  #string
}
ddf = ddf.groupby(atts_to_group).agg(agg_fn).compute().reset_index()
Run Code Online (Sandbox Code Playgroud)

此时,删除不相关的列/行后,我便可以读取内存中的整个数据集,但我希望继续在Dask中进行处理,因为它可以更快地执行所需的操作。

编辑:尝试将自定义函数直接添加到字典中:

def custom_concat(df):
    ...
    return df_concatd

agg_fn = {
  'C': 'mean'  #int
  'D': custom_concat(df)
}

-------------------------------------------------------
ValueError: unknown aggregate Dask DataFrame Structure:
Run Code Online (Sandbox Code Playgroud)

python group-by aggregation dataframe dask

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

正则表达式仅提取字母数字单词

我正在寻找一个正则表达式来提取只包含字母数字字符的单词:

string = 'This is a $dollar sign !!'
matches = re.findall(regex, string)
matches = ['This', 'is', 'sign']
Run Code Online (Sandbox Code Playgroud)

这可以通过对字符串进行标记并使用以下正则表达式单独评估每个标记来完成:

^[a-zA-Z0-9]+$
Run Code Online (Sandbox Code Playgroud)

由于性能问题,我希望能够在不标记整个字符串的情况下提取字母数字标记。我最接近的是

regex = \b[a-zA-Z0-9]+\b
Run Code Online (Sandbox Code Playgroud)

,但它仍然提取包含字母数字字符的子字符串:

string = 'This is a $dollar sign !!'
matches = re.findall(regex, string)
matches = ['This', 'is', 'dollar', 'sign']
Run Code Online (Sandbox Code Playgroud)

是否有正则表达式能够解决这个问题?我尝试了不同的方法,但找不到解决方案。

python regex alphanumeric

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

并行进程覆盖进度条 (tqdm)

我正在用 Python 3.7 编写一个脚本,该脚本使用multiprocessing.Process(每个内核一个任务)启动多个并行任务。为了跟踪每个进程的进度,我使用了tqdm实现进度条的库。我的代码如下所示:

with tqdm(total=iterator_size) as progress_bar:
     for row in tqdm(batch):
         process_batch(batch)
         progress_bar.update(1)
Run Code Online (Sandbox Code Playgroud)

进度条确实会相应地更新,但由于多个进程运行上面的代码,每个进程都会覆盖控制台上的进度条,如下面的屏幕截图所示。

在此处输入图片说明

完成后,控制台正确显示完成的进度条:

在此处输入图片说明

我的目标是让进度条更新而不会相互覆盖。有没有办法实现这一目标?

一个可能的解决方案是只在需要最长的进程上显示进度条(我事先知道哪个是),但最好的情况是根据第二张图片为每个进程更新一个。

所有解决方案在线地址multiprocess.Pool,但我不打算改变我的架构,因为我可以充分利用multiprocess.Process.

parallel-processing concurrency python-3.x tqdm

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

切(!)vs返回

我正在Prolog中开发一个谓词,它有可能在它结束之前终止.出于这个原因,我正在寻找类似于return;(C++)的命令.我用了一个,cut !但我怀疑它的字面意思是什么,如果它确实做了什么return;.例如:

pred(X) :- 
           X = 1 -> do this, !; else do that,
           write('x =/= 1').

void pred(int X) {
       if (X = 1) {do this; return;} else do that;
       cout << "x =/= 1";
}
Run Code Online (Sandbox Code Playgroud)

上面的功能是完全一样的吗?

prolog prolog-cut

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

在动画期间屏幕闪烁白色

我正在开发一个Java程序,我开始使用一个简单的动画.它包括显示存储在一个数组(40帧)中的一组帧.

动画本身正在正常工作,虽然每当我运行它时,我会得到随机闪烁(屏幕闪烁白色).我不知道它可能与什么有关,但我猜它与缺乏优化有关.有解决方案吗 这是下面的代码

//Handles the main interface
MainUI.java

package gui;

import java.awt.BorderLayout;

public class MainUI extends JFrame implements ActionListener{

    //main panel
    private JPanel contentPane;

    //animation
    private ImageIcon[] frames; //animation frames
    private Timer timer; 
    private int delay = 50; //0,5s
    private int currentFrame = 0;

    public MainUI() {

        Map M = new Map();

        loadAnimation(M);

        //Main frame
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 640, 360);
        setResizable(false);
        setTitle("Monopoly Java");

        //Panel
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JLabel label = …
Run Code Online (Sandbox Code Playgroud)

java flash animation swing screen

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