我一直在使用下面的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) 我正在尝试实现一个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) 简单的例子:
>>> 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事后使用?
我试图编写扑克牌-EVAL,AC静态库中的Python包装.所有我能找到的ctypes的文件表明,它适用于共享/动态库.是否有静态库的ctypes?
我知道用Cython,但我应该使用或重新编译扑克-EVAL成一个动态库,以便我可以使用ctypes的?
谢谢,
麦克风
我正在努力在Python中实现一个基本的蒙特卡罗模拟器,用于我正在尝试的一些项目管理风险建模(基本上是Crystal Ball/@Risk,但是在Python中).
我有一组n随机变量(所有scipy.stats实例).我知道我可以用来从这些变量中rv.rvs(size=k)产生k 独立的观察结果n.
我想通过指定n x n正半正定相关矩阵来引入变量之间的相关性.
scipy有一个干净的方法吗?
我试过的
这个答案和这个答案似乎表明"copulas"将是一个答案,但我没有看到他们的scipy任何参考.
这个链接似乎实现了我正在寻找的东西,但我不确定scipy是否已经实现了这个功能.我也喜欢它适用于非正常变量.
似乎Iman,Conover论文是标准方法.
这是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) 我正在寻找使用Haskell或F#学习函数式编程.
是否有任何编程习惯(好的或坏的)可能形成Haskell的懒惰评估?为了理解函数式编程,我喜欢Haskell函数式编程纯度的概念.我只是有点担心两件事:
谢谢,
麦克风
我正在尝试构建一个非常轻量级的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基于做递归的方法.
谢谢,
麦克风 …
我正在编写一个节点CRUD应用程序,需要一些CouchDB视图(我正在使用express和cradle).
我已经用git控制了节点应用程序本身,但我的数据库视图目前是不受控制的.
将这些置于源代码管理之下的推荐方法是什么?我不想将整个数据库(包括数据)置于源代码管理之下.
有关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中定义的名称似乎很危险.
谢谢,
麦克风