小编sil*_*ado的帖子

如何在没有类型问题的情况下继承Python列表?

我想在Python中实现一个自定义列表类作为子类list.list为了获得所有列表操作的完全类型兼容性,我需要从基类重写的最小方法集是什么?

这个问题表明至少__getslice__需要被覆盖.从进一步的研究,也__add____mul__是必需的.所以我有这个代码:

class CustomList(list):
    def __getslice__(self,i,j):
        return CustomList(list.__getslice__(self, i, j))
    def __add__(self,other):
        return CustomList(list.__add__(self,other))
    def __mul__(self,other):
        return CustomList(list.__mul__(self,other))
Run Code Online (Sandbox Code Playgroud)

即使没有重写方法,以下语句也可以按预期工作:

l = CustomList((1,2,3))
l.append(4)                       
l[0] = -1
l[0:2] = CustomList((10,11))    # type(l) is CustomList
Run Code Online (Sandbox Code Playgroud)

这些语句仅适用于上述类定义中的重写方法:

l3 = l + CustomList((4,5,6))    # type(l3) is CustomList
l4 = 3*l                        # type(l4) is CustomList
l5 = l[0:2]                     # type(l5) is CustomList
Run Code Online (Sandbox Code Playgroud)

我唯一不知道如何实现的是使扩展切片返回正确的类型:

l6 = l[0:2:2]                   # type(l6) is list
Run Code Online (Sandbox Code Playgroud)

为了获得CustomList类型,我需要添加到我的类定义中l6 …

python list subclass

33
推荐指数
3
解决办法
2万
查看次数

使用matplotlib自动检测显示可用性

我正在脚本中生成matplotlib数字,我可以在有或没有图形显示的情况下交替运行.我希望脚本能够自动调整:通过显示,它应该以交互方式显示数字,而没有显示,它应该只是将它们保存到文件中.

没有正在运行的X服务器生成matplotlib图的问题的答案,我了解到可以使用Agg后端进行非交互式绘图.

所以我正在尝试使用此代码:

import matplotlib
try:
    import matplotlib.pyplot as plt
    fig = plt.figure()
    havedisplay = True
except:
    matplotlib.use("Agg")
    import matplotlib.pyplot as plt
    fig = plt.figure()
    havedisplay = False
# do the plotting
if havedisplay:
    plt.show()
else:
    fig.savefig("myfig.png")
Run Code Online (Sandbox Code Playgroud)

这在带有显示器的情况下是例外的.但是,如果没有显示,则调用matplotlib.use无效,因为已经选择了显示.很明显我matplotlib.use之前应该打电话import matplotlib.pyplot,但后来我不知道如何测试显示器是否可用.

我也试过使用实验函数matplotlib.switch_backend而不是matplotlib.use,但这会产生RuntimeError.

有人知道如何使上述代码按预期工作,或者可以建议另一种方法来检测显示器是否可用于matplotlib?

python linux matplotlib

15
推荐指数
3
解决办法
4763
查看次数

马尔可夫决策过程的数据结构

我已经在Python中为简单的Markov决策过程Wikipedia实现了值迭代算法.为了保持特定马尔可夫过程的结构(状态,动作,转换,奖励)并迭代它,我使用了以下数据结构:

  1. 可用于这些状态的状态和操作的字典:

    SA = { 'state A': {' action 1', 'action 2', ..}, ...}

  2. 转换概率字典:

    T = {('state A', 'action 1'): {'state B': probability}, ...}

  3. 奖励词典:

    R = {('state A', 'action 1'): {'state B': reward}, ...}.

我的问题是:这是正确的方法吗?MDP最适合的数据结构(在Python中)是什么?

python artificial-intelligence markov

11
推荐指数
2
解决办法
7656
查看次数

Python中**kwargs参数的可变性

考虑我kwargs在方法中更改dict 的情况:

def print_arg(**kwargs):
    print kwargs.pop('key')
Run Code Online (Sandbox Code Playgroud)

如果我pop_arg用这样的字典调用方法:

mydict = {'key':'value'}
print_arg(**mydict)
Run Code Online (Sandbox Code Playgroud)

mydict这个电话会改变吗?

我也对mydict更改或不更改的底层方法调用机制的更详细解释感兴趣.

python dictionary immutability

9
推荐指数
3
解决办法
1379
查看次数

是否有为python建立的memoize on-disk装饰器?

我一直在寻找一个python模块,它提供了一个具有以下功能的memoize装饰器:

  • 将缓存存储在磁盘上以便在后续程序运行中重用.
  • 适用于任何可选择的参数,最重要的是numpy数组.
  • (Bonus)检查参数是否在函数调用中发生变异.

我发现了几个小的代码段用于这个任务,很可能实现一个自己,但我宁愿有一个既定的软件包这一任务.我也发现了incpy,但这似乎不适用于标准的python解释器.

理想情况下,我希望functools.lru_cache在磁盘上加上缓存存储.有人能指点我这个合适的套餐吗?

python decorator memoization

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

如何改变matlab图的线条颜色(如colormap)?

我有一个2D空间,其中定义了一个函数值(您可以将其视为一个流形).现在我使用contourf绘制了函数值,并将colormap更改为比jet更柔和的东西.到目前为止它看起来很不错.

现在我想在我的空间画一条代表状态的线.使用该plot命令也是可能的.但是我想要一些更多改进:现在有一个隐藏的额外状态(值0 ... 50).我想根据这种隐藏状态改变线条颜色.因此,在某种意义上,将单独的色彩映射应用于由plot例如瀑布图中绘制的线.

这是(或类似的)使用matlab可能吗?

谢谢

matlab plot colors

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

有条不紊地枚举python中的项目

我想在满足特定条件的迭代中枚举这些项.我尝试过类似的东西

[(i,j) for i,j in enumerate(range(10)) if (3 < j) and (j < 8)]
Run Code Online (Sandbox Code Playgroud)

(试图枚举4到7之间的数字只是为了一个例子).从这里,我得到了结果

[(4, 4), (5, 5), (6, 6), (7, 7)]
Run Code Online (Sandbox Code Playgroud)

我想得到的是

[(0, 4), (1, 5), (2, 6), (3, 7)]
Run Code Online (Sandbox Code Playgroud)

是否有一种pythonic方式来达到预期的效果?

请注意,在我正在处理的实际问题中,我事先并不知道有多少项满足条件.

python iterable

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

正确使用numpy.nditer?

我正在尝试使用numpy.nditer进行数组操作,但是没有得到预期的结果.

我的代码是

import numpy as np
arr1 = - np.random.random((2,2))
arr2 = np.random.random((2,2))
arr = np.zeros((2,2))
it = np.nditer([arr1, arr2, arr], [], [['readonly'], ['readonly'], ['writeonly']])
for a1, a2, a in it:
    a = a1 if -a1 < a2 else a2
print arr
print it.operands[2]
Run Code Online (Sandbox Code Playgroud)

我得到的所有结果为零均arrit.operands[2],但我希望无论从价值arr1还是arr2.arr在迭代中为值赋值的正确方法是什么?

python numpy

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

如何在Python中匹配没有特定字符的字符串?

哪个正则表达式模式将匹配Python中包含特定字符的子字符串?例如,我有字符串"abc,5 * de",我想匹配"abc""5 * de"作为两个子串,但不是,.

python regex

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