小编Ian*_*cks的帖子

装饰器上的抽象方法

在python中,有没有办法让抽象方法上的装饰器继续执行派生的实现?

例如,在

import abc

class Foo(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    @some_decorator
    def my_method(self, x):
        pass

class SubFoo(Foo):
    def my_method(self, x):
        print x
Run Code Online (Sandbox Code Playgroud)

SubFoomy_method将不会饰some_decorator据我可以告诉.有没有什么方法可以实现这一点,而无需单独装饰每个派生类Foo

python decorator abc

20
推荐指数
2
解决办法
2363
查看次数

python的matplotlib.pyplot中3D参数曲线的线条颜色

我一直在谷歌搜索没有成功...也许我的关键字只是糟糕.无论如何,假设我有三个numpy.ndarray相同长度的1D ,我想将它们绘制成3D轨迹.此外,我希望能够做以下任何一件事:

  1. 根据函数更改线条的颜色 z
  2. 将行的颜色更改为时间的函数(即数组中的索引)

这个演示有一个制作这样一条曲线的例子:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是我如何实现12?欢迎只有一个或另一个的解决方案!提前致谢.

python matplotlib

16
推荐指数
2
解决办法
6729
查看次数

检查向量是否增加矩阵等级的最快方法

给定的n-m矩阵A,它被保证N> M =秩(A),并给予一个正由-1柱V,什么是检查[A V]的秩为严格的最快方式大于A?

对于我的应用,A是稀疏的,n大约是2 ^ 12,m是1:n-1中的任何位置.比较等级(完整([A v]))在我的机器上花费大约一秒钟,我需要做数万次,所以我很乐意发现更快捷的方式.

performance matlab rank

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

prop = extract不返回WikiMedia API中的所有提取

我想使用维基百科API一次性返回多个维基百科文章的摘录.我正在尝试,例如,以下请求(我只是随机选择了pageids):

http://en.wikipedia.org/w/api.php?format=xml&action=query&pageids=3258248|11524059&prop=extracts&exsentences=1

但它只包含第一个pageid的提取,而不是第二个.其他属性似乎没有这个限制.例如

http://en.wikipedia.org/w/api.php?format=xml&action=query&pageids=3258248|11524059&prop=categories

将返回两个pageid的类别.这是一个错误,还是我错过了什么?

wikipedia mediawiki-api

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

在matlab中将双输入函数转换为可变长度输入函数的巧妙方法

这只是一个有趣的问题.假设我有一个二进制函数,它接受方形矩阵并输出相同大小的方形矩阵(或者更一般地说,它的输入类型和大小与其输出类型和大小相同):

function C = myfunc(A,B)
Run Code Online (Sandbox Code Playgroud)

一个例子是mtimes funcion.有什么不同和聪明的方法将其变成可变长度输入功能

function C = myfunc_multi(varargin)
Run Code Online (Sandbox Code Playgroud)

这样的

myfunc(A{1},myfunc(A{2},myfunc(A{3},...myfunc(A{end-1},A{end})...))) == 
    myfunc_multi(A{:})
Run Code Online (Sandbox Code Playgroud)

这是我遇到的第一个通用解决方案(编辑:除了递归或循环):

function C = multioutput(functionhandle, varargin)
    n = length(varargin);
    funcstr = functiontostring(functionhandle);
    str = regexprep(arrayfun(@num2str,1:n-1),'(.)',[funcstr '(varargin{$1},']);
    C = eval(sprintf('%svarargin{%d}%s',str,n,repmat(')',1,n-1)));
end
Run Code Online (Sandbox Code Playgroud)

然后你可以用类似的东西测试它

A = {rand(3) rand(3) rand(3) rand(3) rand(3)};
multioutput(@mtimes,A{:})-A{1}*A{2}*A{3}*A{4}*A{5}
Run Code Online (Sandbox Code Playgroud)

测试它.您还能想到其他任何方式吗?

matlab arguments function

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