小编Abi*_*iel的帖子

滚动方差算法

我正在尝试找到一种有效的,数值稳定的算法来计算滚动方差(例如,20周期滚动窗口的方差).我知道Welford算法可以有效地计算数字流的运行方差(它只需要一次通过),但我不确定这是否可以适应滚动窗口.我也想解决方案,以避免在顶部讨论的准确性问题,这篇文章由John D.库克.任何语言的解决方案都很好.

algorithm statistics variance

61
推荐指数
7
解决办法
3万
查看次数

从1d numpy数组生成分隔字符串的最快方法

我有一个程序需要将许多大型的一维numpy浮点数组变成分隔的字符串.相对于我的程序中的数学运算,我发现这个操作相当慢,我想知道是否有办法加速它.例如,考虑以下循环,它在numpy数组中占用100,000个随机数,并将每个数组连接成逗号分隔的字符串.

import numpy as np
x = np.random.randn(100000)
for i in range(100):
    ",".join(map(str, x))
Run Code Online (Sandbox Code Playgroud)

此循环大约需要20秒才能完成(总计,而不是每个循环).相反,考虑像元素乘法(x*x)这样的100个循环将需要超过1/10秒才能完成.显然,字符串连接操作会产生很大的性能瓶颈; 在我的实际应用程序中,它将主导整个运行时.这让我想知道,有没有比","更快的方式.join(map(str,x))?由于map()几乎是所有处理时间的发生,因此可归结为是否有更快的方式将大量数字转换为字符串.

python numpy

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

即使在提交更改后,MySQL-python连接也看不到对另一个连接上的数据库所做的更改

我正在使用MySQL的MySQLdb模块(用于Windows Python 2.7的v1.2.3预编译二进制文件)来读取和写入MySQL数据库的数据.一旦连接打开,我就可以使用该连接来观察在同一连接上对数据库所做的更改,但是看不到使用其他连接进行的更改,无论另一个连接是在Python中进行还是使用了更改MySQL命令行客户端.在我使用Python进行更新的情况下,请注意我在连接上运行commit()命令.

使用一个VARCHAR列将新记录插入测试表的程序示例:

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")
c = conn.cursor()
c.execute("INSERT INTO test VALUES(%s)", ("Test",))
conn.commit()
c.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)

最终打印常量记录计数的程序示例(而不是打印最新的记录计数).我只能通过杀死和重新运行脚本或每次SELECT运行语句时打开一个新连接来更新计数.

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")

while True:
    input = raw_input("Enter anything: ")
    if input == "exit":
        break

    c = conn.cursor()
    c.execute("SELECT COUNT(*) FROM test")
    res = c.fetchone()[0]
    c.close()

    print("Number of records: %d" % res)
Run Code Online (Sandbox Code Playgroud)

python mysql cursor mysql-python

15
推荐指数
2
解决办法
5708
查看次数

localhost上的慢速Python HTTP服务器

我在创建一个非常简单的Python HTTP服务器时遇到了一些性能问题.关键问题是性能取决于我用来访问它的客户端,服务器和所有客户端在本地计算机上运行的位置.例如,从Python脚本(urllib2.urlopen(' http:// localhost / ').read())发出的GET请求只需要一秒钟就可以完成,考虑到服务器处于空载状态,这似乎很慢.使用MSXML2.ServerXMLHTTP从Excel运行GET请求也感觉很慢.但是,请求数据谷歌Chrome或来自RCurl的卷曲加载项RCurl会产生基本上即时的响应,这正是我所期望的.

更让我感到困惑的是,当我在工作时使用计算机时,我没有遇到任何客户端的性能问题(性能问题出在我的家用计算机上).两个系统都运行Python 2.6,尽管工作计算机运行Windows XP而不是7.

下面是我非常简单的服务器示例,它只是为任何get请求返回'Hello world'.

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print("Just received a GET request")
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        self.wfile.write('Hello world')

        return

    def log_request(self, code=None, size=None):
        print('Request')

    def log_message(self, format, *args):
        print('Message')

if __name__ == "__main__":
    try:
        server = HTTPServer(('localhost', 80), MyHandler)
        print('Started http server')
        server.serve_forever()
    except KeyboardInterrupt:
        print('^C received, shutting down server')
        server.socket.close()
Run Code Online (Sandbox Code Playgroud)

请注意,在MyHandler中,我重写了log_request()和log_message()函数.原因是我读到由这些功能之一执行的完全限定的域名查找可能是服务器速度慢的原因.不幸的是,将它们设置为仅打印静态消息并不能解决我的问题.

另外,请注意我已将print()语句作为MyHandler中do_GET()例程的第一行.在打印此消息之前发生缓慢,这意味着在它之后没有任何东西导致延迟.

python

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

R6类中的静态方法

有没有办法向R6类添加静态方法?例如,可以调用的函数

MyClass$method()
Run Code Online (Sandbox Code Playgroud)

代替

myinstance <- MyClass$new()
myinstance$method()
Run Code Online (Sandbox Code Playgroud)

r r6

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

确保__init__仅在构造函数或__new__创建类实例时调用一次

我试图理解当创建过程可以通过构造函数或通过__new__方法时应该如何创建Python类的新实例.特别是,我注意到在使用构造函数时,该__init__方法将在之后自动调用__new__,而在__new__直接调用__init__时,不会自动调用该类.__init____new__通过嵌入对__init__内部的调用显式调用时,我可以强制调用__new__,但是__init__当通过构造函数创建类时,最终会被调用两次.

例如,考虑以下玩具类,它存储一个内部属性,即一个list名为的对象data:将此视为向量类的开头很有用.

class MyClass(object):
    def __new__(cls, *args, **kwargs):
        obj = object.__new__(cls, *args, **kwargs)
        obj.__init__(*args, **kwargs)
        return obj

    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.__new__(type(self), self.data[index])

    def __repr__(self):
        return repr(self.data)
Run Code Online (Sandbox Code Playgroud)

可以使用构造函数创建类的新实例(实际上不确定这是否是Python中的正确术语),类似于

x = MyClass(range(10))

或通过切片,你可以看到调用一个调用__new____getitem__方法.

x2 = x[0:2]

在第一个实例中,__init__将被调用两次(通过内部显式调用__new__然后再自动调用),并在第二个实例中调用一次.显然,我只想__init__在任何情况下调用一次.有没有一种标准的方法在Python中执行此操作?

请注意,在我的示例中,我可以摆脱该__new__方法并重新定义__getitem__ …

python

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

为什么numpy.apply_along_axis似乎比Python循环慢?

当numpy的numpy.apply_along_axis()函数优于简单的Python循环时,我很困惑.例如,考虑具有许多行的矩阵的情况,并且您希望计算每行的总和:

x = np.ones([100000, 3])
sums1 = np.array([np.sum(x[i,:]) for i in range(x.shape[0])])
sums2 = np.apply_along_axis(np.sum, 1, x)
Run Code Online (Sandbox Code Playgroud)

在这里,我甚至使用内置的numpy函数,np.sum但计算sums1(Python循环)需要不到400ms而calculate sums2(apply_along_axis)需要超过2000ms(Windows上的NumPy 1.6.1).通过进一步的比较方式,R的rowMeans函数通常可以在不到20ms的时间内完成(我很确定它正在调用C代码),而类似的R函数apply()可以在大约600ms内完成.

python numpy

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

停止VBA评估两次调用目标函数

我无法让VBA的Evaluate()函数只执行一次; 它似乎总是运行两次.例如,考虑下面的简单示例.如果我们运行RunEval()子例程,它将调用两次EvalTest()函数.这可以通过在即时窗口中打印的两个不同的随机数看出.如果我们使用Evaluate而不是函数调用另一个子例程,行为将是相同的.有人可以解释我如何获得Evaluate执行目标函数一次而不是两次?谢谢.

Sub RunEval()
    Evaluate "EvalTest()"
End Sub

Public Function EvalTest()
    Debug.Print Rnd()
End Function
Run Code Online (Sandbox Code Playgroud)

excel vba

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

mechanize无法使用已禁用且没有值的SubmitControl读取表单

我正在尝试使用mechanize(v0.2.5)来处理页面上具有禁用图像作为表单元素之一的表单.当我尝试选择表单时,mechanize会引发一个AttributeError: control 'test' is disabled地方test是禁用控件的名称.例如,

br = mechanize.Browser(factory=mechanize.RobustFactory())
br.open("http://whatever...")
br.select_form(nr=0)
Run Code Online (Sandbox Code Playgroud)

导致此堆栈跟踪:

    br.select_form(nr=0)
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 499, in select_form
  File "build\bdist.win32\egg\mechanize\_html.py", line 544, in __getattr__
  File "build\bdist.win32\egg\mechanize\_html.py", line 557, in forms
  File "build\bdist.win32\egg\mechanize\_html.py", line 237, in forms
  File "build\bdist.win32\egg\mechanize\_form.py", line 844, in ParseResponseEx
  File "build\bdist.win32\egg\mechanize\_form.py", line 1017, in _ParseFileEx
  File "build\bdist.win32\egg\mechanize\_form.py", line 2735, in new_control
  File "build\bdist.win32\egg\mechanize\_form.py", line 2336, in __init__
  File "build\bdist.win32\egg\mechanize\_form.py", line 1221, in __setattr__
AttributeError: control 'test' is disabled
Run Code Online (Sandbox Code Playgroud)

检查机械化源代码,当有任何表单元素评估为a mechanize.SubmitControl且没有预定义value属性时,看起来总是会引发此错误.例如,以下表单会引发相同的错误: …

python mechanize

8
推荐指数
2
解决办法
2527
查看次数

给定起始位置和结束位置列表构造 Numpy 索引

我有两个大小相同的 numpy.array 对象(都是一维),其中一个包含起始索引位置列表,另一个包含结束索引位置列表(或者你可以说我有一个列表起始位置和窗口长度)。如果重要的话,由起始位置和结束位置形成的切片保证不重叠。我试图弄清楚如何使用这些开始和结束位置来形成另一个数组对象的索引,而不必使用循环。

例如:

import numpy as np
start = np.array([1,7,20])
end = np.array([3,10,25])
Run Code Online (Sandbox Code Playgroud)

想参考一下

somearray[1,2,7,8,9,20,21,22,23,24])
Run Code Online (Sandbox Code Playgroud)

python numpy

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

标签 统计

python ×7

numpy ×3

algorithm ×1

cursor ×1

excel ×1

mechanize ×1

mysql ×1

mysql-python ×1

r ×1

r6 ×1

statistics ×1

variance ×1

vba ×1