小编fod*_*don的帖子

增长numpy数值数组的最快方法

要求:

  • 我需要从数据中增加一个任意大的数组.
  • 我可以猜测大小(大约100-200),但不能保证阵列每次都适合
  • 一旦它生长到它的最终大小,我需要对它进行数值计算,所以我宁愿最终得到一个2-D numpy数组.
  • 速度至关重要.例如,对于300个文件中的一个,update()方法被称为4500万次(大约需要150s),而finalize()方法被称为500k次(总共106s)...总共250s或者.

这是我的代码:

def __init__(self):
    self.data = []

def update(self, row):
    self.data.append(row)

def finalize(self):
    dx = np.array(self.data)
Run Code Online (Sandbox Code Playgroud)

我试过的其他事情包括以下代码......但这是waaaaay慢.

def class A:
    def __init__(self):
        self.data = np.array([])

    def update(self, row):
        np.append(self.data, row)

    def finalize(self):
        dx = np.reshape(self.data, size=(self.data.shape[0]/5, 5))
Run Code Online (Sandbox Code Playgroud)

以下是如何调用此示意图的示意图:

for i in range(500000):
    ax = A()
    for j in range(200):
         ax.update([1,2,3,4,5])
    ax.finalize()
    # some processing on ax
Run Code Online (Sandbox Code Playgroud)

python performance numpy

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

使用Colormaps在matplotlib中设置线条的颜色

如何使用colormap(比如jet)在运行时使用标量值设置matplotlib中一行的颜色?我在这里尝试了几种不同的方法,我觉得我很难过.values[]是一系列标量.曲线是一组1-d数组,标签是文本字符串数组.每个阵列具有相同的长度.

fig = plt.figure()
ax = fig.add_subplot(111)
jet = colors.Colormap('jet')
cNorm  = colors.Normalize(vmin=0, vmax=values[-1])
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
lines = []
for idx in range(len(curves)):
    line = curves[idx]
    colorVal = scalarMap.to_rgba(values[idx])
    retLine, = ax.plot(line, color=colorVal)
    #retLine.set_color()
    lines.append(retLine)
ax.legend(lines, labels, loc='upper right')
ax.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib

63
推荐指数
4
解决办法
15万
查看次数

EC2按计划启动

我需要每天早上6点启动一个EC2实例.限制是我想避免让计算机一整天都在运行启动或使用像ylastic这样的付费解决方案.

到目前为止,alestic 的解决方案是最接近的.此解决方案的缺点是启动时间很长,因为安装自定义软件和移动数据所需的时间.

有没有办法只启动实例而不是每次都创建一个新实例,如本所示?

amazon-ec2

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

使用apache avro反映

Avro序列化在Hadoop用户中很受欢迎,但很难找到示例.

有谁可以帮我这个示例代码?我最感兴趣的是使用Reflect API来读/写文件并使用Union和Null注释.

public class Reflect {

    public class Packet {
        int cost;
        @Nullable TimeStamp stamp;
        public Packet(int cost, TimeStamp stamp){
            this.cost = cost;
            this.stamp = stamp;
        }
    }

    public class TimeStamp {
        int hour = 0;
        int second = 0;
        public TimeStamp(int hour, int second){
            this.hour = hour;
            this.second = second;
        }
    }

    public static void main(String[] args) throws IOException {
        TimeStamp stamp;
        Packet packet;

        stamp = new TimeStamp(12, 34);
        packet = new Packet(9, stamp);
        write(file, packet);

        packet = …
Run Code Online (Sandbox Code Playgroud)

java reflection avro

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

jmx/jstatd通过ssh隧道访问远程机器

我想使用jmx或jstatd通过ssh隧道(到EC2机器)使用visualvm app.我该怎么做呢?以下是已尝试(和失败)的列表:(顺便说一句:如果视觉vm不合适,如何在远程计算机上找到内存泄漏?)

jstatd:尝试:

我在EC2机器上设置了jstatd服务器(应用程序已在其上运行)然后我设置隧道映射本地端口3333到远程端口1099在VisualVM中我尝试使用端口3333上的jstatd进行连接...没有进程在EC2上出现了

这个链接说jstatd打开另一个端口:http: //rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm ...所以我从本地主机隧道传输该端口远程.我重新启动了视觉vm ...仍然没有

当我尝试使用folloing命令列出从EC2运行的进程时:

jps -l -m -v rmi://localhost
Run Code Online (Sandbox Code Playgroud)

......我得到了一份流程清单

当我在家用机器上列出它时

jps -l -m -v rmi://localhost:3333
Run Code Online (Sandbox Code Playgroud)

......我没有!那么,rmi端口是不是与jstatd端口(3333)隧道连接......?

jmx尝试:

我使用以下命令在远程计算机上启动了应用程序:

java -Dcom.sun.management.jmxremote.port=3333 \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false\
        -cp :post/* <appName>
Run Code Online (Sandbox Code Playgroud)

...该应用程序工作,所以我隧道本地端口3333到远程3333

然后我尝试从visual vm界面设置一个jmx链接到localhost:3333:...它弹出一个错误说:

cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
Run Code Online (Sandbox Code Playgroud)

如果我需要设置删除RMI服务器的链接,我不知道该怎么做.

JMXMP尝试:

这有希望,但有些事情是不对的:

首先,我将jmx_remote jar添加到类路径中,并使用与上面显示的JMX情况相同的命令在远程计算机上启动应用程序.我在oracle下载链接找到了jar

我从本地端口3333到远程端口3333设置了一个ssh隧道.然后我在calsspath中使用相同的jmx_remote文件启动了visualvm.

visualvm -cp:a ~/jmx/jmxremote_optional.jar
Run Code Online (Sandbox Code Playgroud)

然后我尝试将visualvm连接到远程服务器:

service:jmx:jmxmp://localhost:3333
Run Code Online (Sandbox Code Playgroud)

现在,visual vm似乎试图无限连接.它在状态栏中显示"添加服务:jmx:jmxp:// localhost:3333"...并且一直这样做,直到我关闭远程端的应用程序,此时它会弹出一个弹出窗口,说它无法连接与服务器.

使用SOCKS时:

我尝试使用JMX和jstatd失败了.

我不确定SOCKS代理是否正常工作,所以这是我尝试连接的方式:

ssh -i ~/.ssh/starter.pem -v -D 9696 user@host
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我在另一端启动了命令:

    java -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -Dcom.sun.management.jmxremote.port=3333 <app>
Run Code Online (Sandbox Code Playgroud)

在本地端,我根据LINK到VisualVm帮助页面设置了 …

java jmx visualvm

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

继承和基类方法调用python

我希望基类中的方法在同一个类中调用另一个方法而不是在继承的类中调用重写方法.我想打印下面的代码

B级:6

A类:9

可以这样做吗?


# Base class definition
class ClassA(object):
    def __init__(self):
        print("Initializing A")

    # hoping that this function is called by this class's printFnX
    def fnX(self, x):
        return x**2

    def printFnX(self, x):
        print("ClassA:",self.fnX(x))

# Inherits from ClassA above
class ClassB(ClassA):
    def __init__(self):
        print("initizlizing B")

    def fnX(self, x):
        return 2*x

    def printFnX(self, x):
        print("ClassB:", self.fnX(x))
        ClassA.printFnX(self,x)

bx = ClassB()
bx.printFnX(3)
Run Code Online (Sandbox Code Playgroud)

python inheritance

13
推荐指数
2
解决办法
9966
查看次数

关闭缓冲

以下缓冲区在哪里......如何将其关闭?

我正在写一个python程序中的stdout,如下所示:

for line in sys.stdin:
    print line
Run Code Online (Sandbox Code Playgroud)

这里有一些缓冲:

tail -f data.txt | grep -e APL | python -u Interpret.py
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来摆脱可能的缓冲......没有运气:

  • 如上所述使用-u标志和python调用
  • 在每个sys.stdout.write()调用之后调用sys.stdout.flush()...所有这些都创建了一个缓冲流,python等待一分钟打印出前几行.
  • 使用以下修改过的命令:

    stdbuf -o0 tail -f data.txt | stdbuf -o0 -i0 grep -e APL | stdbuf -i0 -o0 python -u Interpret.py

为了衡量我的期望,我试过:

tail -f data.txt | grep -e APL 
Run Code Online (Sandbox Code Playgroud)

这会产生稳定的线条流...它肯定不像python命令那样缓冲.

那么,我该如何关闭缓冲?答案:事实证明管道的两端都有缓冲.

python linux bash buffering

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

迭代通过多维数组的所有1维子阵列

在python中迭代遍历n维数组的所有一维子数组的最快方法是什么.

例如,考虑三维数组:

import numpy as np 
a = np.arange(24)
a = a.reshape(2,3,4)
Run Code Online (Sandbox Code Playgroud)

迭代器所需的产量序列是:

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

python numpy multidimensional-array

9
推荐指数
2
解决办法
1237
查看次数

排序大型文本数据

我有一个大文件(1亿行标签分隔值 - 大小约1.5GB).基于其中一个字段对此进行排序的最快的已知方法是什么?

我试过蜂巢.我想看看是否可以使用python更快地完成.

python sorting bigdata

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

如何扩展pyWavelets以使用N维数据?

这可能是针对不同论坛的问题,如果是这样,请告诉我.我注意到只有14个人关注小波标签.

我在这里将pywt(pyWavelets包)中的小波分解扩展到多个维度.如果安装pywt,这应该是开箱即用的.测试1显示了3D阵列的分解和重组.所有,我们要做的就是增加尺寸数量,代码将用于分解/重新组合4,6或甚至18维数据.

我在这里替换了pywt.wavedec和pywt.waverec函数.另外,在fn_dec中,我展示了新的wavedec函数是如何工作的,就像旧的一样.

但有一个问题:它将小波系数表示为与数据形状相同的数组.因此,由于我对小波的了解有限,我只能将它用于Haar小波.其他像DB4这样的例子就是在这个严格边界的边缘上出血系数(系数的当前表示没有问题作为数组列表[CA,CD1 ... CDN].另一个问题是我只用了2 ^数据的N个边长方体.

从理论上讲,我认为应该可以确保不会出现"流血".这种小波分解和重组的算法在"数字接收器C"中讨论 - 由William Press,Saul A teukolsky,William T. Vetterling和Brian P. Flannery(第二版).虽然这种算法假定边缘处的反射而不是其他形式的边缘扩展(如zpd),但该方法通用性足以用于其他形式的扩展.

关于如何将这项工作扩展到其他小波的任何建议?

注意:此查询也发布在http://groups.google.com/group/pywavelets上

谢谢,Ajo

import pywt
import sys
import numpy as np

def waveFn(wavelet):
    if not isinstance(wavelet, pywt.Wavelet):
        return pywt.Wavelet(wavelet)
    else:
        return wavelet

# given a single dimensional array ... returns the coefficients.
def wavedec(data, wavelet, mode='sym'):
    wavelet = waveFn(wavelet)

    dLen = len(data)
    coeffs = np.zeros_like(data)
    level = pywt.dwt_max_level(dLen, wavelet.dec_len)

    a = data    
    end_idx = dLen
    for idx in xrange(level):
        a, d = …
Run Code Online (Sandbox Code Playgroud)

python signal-processing multidimensional-array wavelet

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