小编Lin*_*Lin的帖子

将Python装饰器与参数合并为一个

我正在使用来自两个不同库的两个不同的装饰器.让我们说:@decorator1(param1, param2)@decorator2(param3, param4).我经常在许多功能中使用:

from moduleA import decorator1
from moduleB import decorator2

@decorator2(foo='param3', bar='param4')
@decorator1(name='param1', state='param2')
def myfunc(funcpar1, funcpar2):
    ...
Run Code Online (Sandbox Code Playgroud)

由于它每次都会发生,我想创建一个处理它们的自定义装饰器.就像是:

@mycustomdecorator(name='param1', state='param2',
                   foo='param3', bar='param4')
def myfunc(funcpar1, funcpar2):
    ...
Run Code Online (Sandbox Code Playgroud)

我如何实现这一目标?

python python-decorators

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

使用 numpy 生成带状矩阵

我正在使用以下代码从生成器创建带状矩阵g

def banded(g, N):
    """Creates a `g` generated banded matrix with 'N' rows"""
    n=len(g)
    T = np.zeros((N,N+n-1))
    for x in range(N):
        T[x][x:x+n]=g
    return T
Run Code Online (Sandbox Code Playgroud)

用法很简单:

banded([1,2,3], 3)
Run Code Online (Sandbox Code Playgroud)

它返回

[1, 2, 3, 0, 0]
[0, 1, 2, 3, 0]
[0, 0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

例如,它将主要用于解决具有给定模板的有限差分模型 (-1, 1)

有没有更好的方法来生成模板?我找不到任何好的 NumPy 函数。

我的意思是,更快,使用更少的内存,从 python 中删除循环并发送到 Numpy 堆栈。其中任何(或全部)都是改进。

python numpy matrix

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

对 paramiko 使用不同的密码

如何指定在 paramiko ssh/sftp 连接上使用的不同密码?(类似于 scp/ssh 中的 -c 命令行)。

我尝试过以下代码:

    self.sshclient = paramiko.SSHClient()
    self.sshclient.load_system_host_keys()
    self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    self.sshclient.connect(hostname, **ssh_kwargs)

    self.transport = self.sshclient.get_transport()
    self.transport.get_security_options().ciphers = ('arcfour128',)
    self.transport.set_keepalive(keepalive)

    self.channel = self.transport.open_session()                                                                                                     
    self.channel.settimeout(timeout)
Run Code Online (Sandbox Code Playgroud)

但在调试时我可以看到:

2016/02/26 15:27:47 DEBUG   Ciphers agreed: local=aes128-ctr, remote=aes128-ctr
2016/02/26 15:27:47 DEBUG   using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none
Run Code Online (Sandbox Code Playgroud)

我在某处读到 Connect 应该在导致我的反转之后发生(get_security_options()似乎传输与连接有关)。self.transportNoneType

python paramiko

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

优化嵌套的for循环

我正在尝试避免使用for循环来运行我的计算.但我不知道该怎么做.我有一个w形状矩阵(40,100).每条线在一段t时间内保持一个波浪的位置.例如,第一行 w[0]是初始条件(也是w[1]出于我将要展示的原因).

计算我使用的下一行元素,用于每个tx在形状范围:

w[t+1,x] = a * w[t,x] + b * ( w[t,x-1] + w[t,x+1] ) - w[t-1,x]
Run Code Online (Sandbox Code Playgroud)

其中ab是基于方程解的一些常量(它其实并不重要), ,a = 2(1-r),.b=r 波速r=(c*(dt/dx))**2在哪里,与增量和方向有关.cdtdxxt

有没有办法避免像for循环:

for t in range(1,nt-1):
    for x in range(1,nx-1):
      w[t+1,x] = a * w[t,x] + b * ( w[t,x-1] + w[t,x+1] ) - w[t-1,x]
Run Code Online (Sandbox Code Playgroud)

nt并且nxw矩阵的形状.

python numpy

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

Scipy 正常 PDF 求和为大于 1 的值

我正在处理scipy.stats.normPDF。我想知道我是否做错了什么(也许是),因为正态分布上的 PDF 之和返回的值大于 1,并且根据定义,概率密度函数的总和应为 1。我会如果总和达到 ~0.99 就可以了(因为我没有对区间内的所有值求和),但 20 不太可接受。下面显示了一个最小示例

from scipy.stats import norm
lower_bound = norm.ppf(0.01)
upper_bound = norm.ppf(0.99)
N = 100
x = np.linspace(lower_bound, upper_bound, 100)
P = norm.pdf(x) 
print(np.sum(P))
Run Code Online (Sandbox Code Playgroud)

python statistics scipy probability-density

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

生成器始终返回相同的元素

我的代码如下:

def xgauss(self):

    m, n = self.m, self.n

    M = self.copy()

    for k in range(n):
        for i in range(k + 1, m):
            yield M
            if not likezero(M[i][k]):
                lam = M[i][k] / M[k][k]
                M[i] = M[i] - lam * M[k]

    yield M
Run Code Online (Sandbox Code Playgroud)

现在足以说ifzero如果值小于精度则返回true(对于数值比较);-)

我的目标是返回高斯消除算法的每次迭代以供学习(课堂).

我有一些测试输入:

In [77]: A
Out[77]: 
Matrix([
        [     1,      4,      1],
        [     1,      6,     -1],
        [     2,     -1,      2]
      ])

In [78]: Ab
Out[78]: 
Matrix([
        [      1,       4,       1,       7],
        [      1,       6,      -1,      13],
        [      2,      -1, …
Run Code Online (Sandbox Code Playgroud)

python generator linear-algebra

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