小编Mik*_*and的帖子

Python - 任何人都有一个memoizing装饰器,可以处理不可用的参数?

我一直在使用下面的memoizing装饰器(来自伟大的书籍Python算法:掌握Python语言中的基本算法......喜欢它,顺便说一句).

def memo(func):
    cache = {}
    @ wraps(func)
    def wrap(*args):
        if args not in cache:
            cache[args] = func(*args)
        return cache[args]
    return wrap
Run Code Online (Sandbox Code Playgroud)

这个装饰器的问题是基于字典的缓存意味着我的所有参数都必须是可清除的.

有没有人有一个允许不可用的参数(例如字典)的实现(或对这一个的调整)?

我知道缺少哈希值意味着"这是否在缓存中?" 变得非常重要,但我只是想我会问.

===编辑给出上下文===

我正在开发一个函数,它返回一个Parnas风格的"使用层次结构"给定模块的字典:依赖项.这是设置:

def uses_hierarchy(requirements):
    """
    uses_hierarchy(requirements)

    Arguments:
    requirements - a dictionary of the form {mod: list of dependencies, }

    Return value:
    A dictionary of the form {level: list of mods, ...}

    Assumptions:
    - No cyclical requirements (e.g. if a requires b, b cannot require a).
    - Any dependency not listed as a mod assumed …
Run Code Online (Sandbox Code Playgroud)

python memoization

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

Numpy:将每行的最大值更改为1,将所有其他数字更改为0

我正在尝试实现一个numpy函数,它将2D数组的每一行中的max替换为1,并将所有其他数字替换为0:

>>> a = np.array([[0, 1],
...               [2, 3],
...               [4, 5],
...               [6, 7],
...               [9, 8]])
>>> b = some_function(a)
>>> b
[[0. 1.]
 [0. 1.]
 [0. 1.]
 [0. 1.]
 [1. 0.]]
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

def some_function(x):
    a = np.zeros(x.shape)
    a[:,np.argmax(x, axis=1)] = 1
    return a

>>> b = some_function(a)
>>> b
[[1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]]
Run Code Online (Sandbox Code Playgroud)

python numpy

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

如何从namedtuple实例列表创建pandas DataFrame(带索引或多索引)?

简单的例子:

>>> from collections import namedtuple
>>> import pandas

>>> Price = namedtuple('Price', 'ticker date price')
>>> a = Price('GE', '2010-01-01', 30.00)
>>> b = Price('GE', '2010-01-02', 31.00)
>>> l = [a, b]
>>> df = pandas.DataFrame.from_records(l, index='ticker')
Traceback (most recent call last)
...
KeyError: 'ticker'
Run Code Online (Sandbox Code Playgroud)

更难的例子:

>>> df2 = pandas.DataFrame.from_records(l, index=['ticker', 'date'])
>>> df2

         0           1   2
ticker  GE  2010-01-01  30
date    GE  2010-01-02  31
Run Code Online (Sandbox Code Playgroud)

现在它认为这['ticker', 'date']是索引本身,而不是我想用作索引的列.

有没有办法做到这一点,而不诉诸中间numpy ndarray或set_index事后使用?

python pandas

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

静态库的ctypes?

我试图编写扑克牌-EVAL,AC静态库中的Python包装.所有我能找到的ctypes的文件表明,它适用于共享/动态库.是否有静态库的ctypes?

我知道用Cython,但我应该使用或重新编译扑克-EVAL成一个动态库,以便我可以使用ctypes的?

谢谢,

麦克风

python ctypes static-libraries

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

scipy - 生成具有相关性的随机变量

我正在努力在Python中实现一个基本的蒙特卡罗模拟器,用于我正在尝试的一些项目管理风险建模(基本上是Crystal Ball/@Risk,但是在Python中).

我有一组n随机变量(所有scipy.stats实例).我知道我可以用来从这些变量中rv.rvs(size=k)产生k 独立的观察结果n.

我想通过指定n x n正半正定相关矩阵来引入变量之间的相关性.

scipy有一个干净的方法吗?

我试过的

这个答案这个答案似乎表明"copulas"将是一个答案,但我没有看到他们的scipy任何参考.

这个链接似乎实现了我正在寻找的东西,但我不确定scipy是否已经实现了这个功能.我也喜欢它适用于非正常变量.

似乎Iman,Conover论文是标准方法.

python numpy scipy

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

这个Fisher-Yates的C实现是否正确?

这是Fisher-Yates的C实现,我想在一个套牌改组例程中使用它.我这样做是否正确(n =数组的长度)?

注意:do-while循环尝试校正模偏差(参见此处).它为程序增加了一些开销,如果您不关心低位偏置,可以将其消除.

void shuffle(int *array, int n) {

  int i, j, tmp, upper_bound;

  srand(time(NULL));

  for (i = n - 1; i > 0; i--) {

    upper_bound = RAND_MAX - ((RAND_MAX % (i + 1)) + 1);

    do {
      j = rand() % (i + 1);
    } while (j > upper_bound);

    tmp = array[j];
    array[j] = array[i];
    array[i] = tmp;   
  }
}
Run Code Online (Sandbox Code Playgroud)

c shuffle

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

由于懒惰的评价,我会养成好/坏的习惯吗?

我正在寻找使用Haskell或F#学习函数式编程.

是否有任何编程习惯(好的或坏的)可能形成Haskell的懒惰评估?为了理解函数式编程,我喜欢Haskell函数式编程纯度的概念.我只是有点担心两件事:

  1. 我可能会将基于惰性评估的功能误解为"功能范例"的一部分.
  2. 我可能会开发在懒惰世界中工作的思维模式,但不能在正常的顺序/热切的评估世界中工作.

谢谢,

麦克风

haskell functional-programming

10
推荐指数
3
解决办法
1086
查看次数

Python - 如何编写更高效的Pythonic减少?

我正在尝试构建一个非常轻量级的Node类,作为基于Python的层次结构搜索工具.请参阅以下定义.

from functools import reduce
from operator import or_


class Node:

    def __init__(self, name):
        self.name = name
        self.children = []

    def add_child(self, child_node):
        self.children.append(child_node)

    def contains(self, other_node):
        if self == other_node:
            return True
        elif other_node in self.children:
            return True
        else:
            return reduce(or_, [child.contains(other_node)
                                for child in self.children], False)

    def is_contained_by(self, other_node):
        return other_node.contains(self)

    def __eq__(self, other_node):
        return self.name == other_node.name

    def __de__(self, other_node):
        return self.name != other_node.name
Run Code Online (Sandbox Code Playgroud)

contains似乎是函数式编程的教科书案例(直接从" 为什么功能编程事项"中提取).

问题:是否有更高效或Pythonic的写作方式contains?我知道这map通常被列表理解所取代,但我还没有看到更好的reduce基于做递归的方法.

谢谢,

麦克风 …

python algorithm tree graph

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

将CouchDB视图置于源代码管理之下的推荐方法是什么?

我正在编写一个节点CRUD应用程序,需要一些CouchDB视图(我正在使用express和cradle).

我已经用git控制了节点应用程序本身,但我的数据库视图目前是不受控制的.

将这些置于源代码管理之下的推荐方法是什么?我不想将整个数据库(包括数据)置于源代码管理之下.

couchdb node.js cradle

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

ctypes中的结构内联合语法

有关ctypes语法的快速问题,因为Unions的文档对于像我这样的初学者来说并不清楚.

假设我想实现一个INPUT结构(见这里):

typedef struct tagINPUT {
  DWORD type;
  union {
    MOUSEINPUT    mi;
    KEYBDINPUT    ki;
    HARDWAREINPUT hi;
  } ;
} INPUT, *PINPUT;
Run Code Online (Sandbox Code Playgroud)

我应该还是需要更改以下代码?

class INPUTTYPE(Union):
    _fields_ = [("mi", MOUSEINPUT),
                ("ki", KEYBDINPUT),
                ("hi", HARDWAREINPUT)]

class INPUT(Structure):
    _fields_ = [("type", DWORD),
                (INPUTTYPE)]
Run Code Online (Sandbox Code Playgroud)

不确定我可以为联合使用一个未命名的字段,但添加一个未在Win32API中定义的名称似乎很危险.

谢谢,

麦克风

python ctypes

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