小编Lir*_*aro的帖子

在python中检测C类型限制("limits.h")?

我在python中做了一个小测试程序,在很多情况下测试一些C函数.这个python程序用于ctypes导入和使用我的C函数.

但我也想测试的最小值和最大值的情况下(limits.hULLONG_MAX举例).

但由于其中一些限制可能取决于系统,我宁愿避免在我的程序中对其进行硬编码; 我宁愿动态地得到它.

是否有可能在python中获得这些限制值?

c python ctypes limit

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

Java 函数的参数是否需要可选接口?

我在 Java(版本 8)中有两个非常相似的接口。我无法更改接口,也无法更改实现它们的类。

public interface A {
    int get();
}

public interface B {
    int get();
    int somethingelse();
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个函数,它的实现适合两个接口(几乎)。我希望它做这样的事情:

public int foo((A | B) p) {
    int ret = 0;
    if (p instanceof B) {
        ret = p.somthingelse();
    }
    return ret + p.get();
}
Run Code Online (Sandbox Code Playgroud)

我不想使用检查,因为这个函数在我程序的主管道上。我希望它具有良好的性能。是否可以在 Java 中执行此操作?

编辑:

一个简单的解决方案是foo()为每个接口复制/粘贴并以不同的方式实现它。但实际上foo(),接口比这长得多,我正在努力避免代码重复。

java generics java-8

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

哪里可以找到Chaikin角切割算法的Python实现?

我正在寻找在Python 2.7.X中实现的Chaikin的角切割算法(link1,link2),但找不到它.

也许有人拥有它并且能够共享代码?

python algorithm implementation smoothing python-2.7

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

使用 utf-8 字符串解码 msgpack_numpy

我使用 python 3.6msgpack==0.5.1msgpack_numpy==0.4.2.

尝试对 a 进行编码和解码时dict需要使用utf-8将 dict 的键恢复为字符串(而不是二进制文件)字符串。

例如:

import msgpack

d = {'key': None}
binary = msgpack.packb(d)

ret = msgpack.unpackb(binary)
ret.keys()
>>> dict_keys([b'key'])

ret = msgpack.unpackb(binary, encoding='utf-8')
ret.keys()
>>> dict_keys(['key'])
Run Code Online (Sandbox Code Playgroud)

但是,在使用时msgpack_numpy,传递会encoding='utf-8'阻止numpy解码:

import numpy as np
import msgpack_numpy as m
m.patch()

d['key'] = np.arange(5)
binary = msgpack.packb(d)

ret = msgpack.unpackb(binary)
ret.keys()
>>> dict_keys([b'key'])
ret[b'key']
>>> array([0, 1, 2, 3, 4])

ret = msgpack.unpackb(binary, encoding='utf-8') …
Run Code Online (Sandbox Code Playgroud)

python encoding numpy utf-8 msgpack

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

提高多线程程序的速度

我有一个简单的问题:我需要创建三个线程并在每个线程中执行某个操作.第一个线程需要添加100array[0]和减去101array[1],第二线程需要添加200array[1]并减去201array[2]而最终第三线程需要添加300array[2]并减去301array[0].

以下是正确的解决方案,但运行时间非常长.如果我使用一个线程执行此任务,则运行时间将少于1秒,但是三个线程将运行时间增加到大约10秒(+ - 2秒).问题是什么?我认为有三个线程的解决方案必须更快.可能是我以错误的方式使用互斥?

#include <stdio.h>
#include <pthread.h>
#include <limits.h>

enum {SIZE = 3, ITER = 1000000};
double array[SIZE] = {};
pthread_t threads[SIZE];

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *func(void *arg) {
    int n = *(int *)arg;
    int tmp = 100 * (n + 1),
        tmp2 = tmp + 1;
    for (int i = 0; i != …
Run Code Online (Sandbox Code Playgroud)

c multithreading

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