小编Dav*_*ide的帖子

是否有可能加速python IO?

考虑这个python程序:

import sys

lc = 0
for line in open(sys.argv[1]):
    lc = lc + 1

print lc, sys.argv[1]
Run Code Online (Sandbox Code Playgroud)

在我的6GB文本文件上运行它,它在~2分钟内完成.

问题:是否有可能加快速度?

请注意,同一时间需要:

wc -l myfile.txt
Run Code Online (Sandbox Code Playgroud)

所以,我怀疑对我的问题的回答只是一个简单的"不".

另请注意,我的真实程序正在做一些比计算线条更有趣的事情,所以请给出一个通用答案,而不是行计数技巧(比如在文件中保留行数元数据)

PS:我在这个问题上标记了"linux",因为我只对linux特定的答案感兴趣.如果有的话,请随意提供与操作系统无关的内容,甚至是其他操作系统的答案.

另见后续问题

python linux performance text-files

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

自然语言处理中的二值化

二值化是将实体的彩色特征转换为数字向量(通常是二进制向量)的行为,以便为分类器算法提供良好的示例.

如果我们将句子"猫吃狗"二进制化,我们可以先为每个单词分配一个ID(例如cat-1,ate-2,the-3,dog-4),然后简单地将单词替换为它的ID给出了矢量<3,1,2,3,4>.

给定这些ID,我们还可以通过给每个字四个可能的槽创建二进制向量,并将对应于特定单词的槽设置为1,给出向量<0,0,1,0,1,0,0,0 ,0,1,0,0,0,0,0,1>.据我所知,后一种方法通常被称为词袋方法.

现在,对于我的问题,一般来说,描述自然语言处理的特征,特别是基于转换的依赖解析(使用Nivres算法)时,最好的二值化方法是什么?

在这种情况下,我们不希望编码整个句子,而是编码解析的当前状态,例如堆栈中的顶部单词和输入队列中的第一个单词.由于订单具有高度相关性,因此排除了词袋方法.

有了最好的,我指的是,使数据的最可理解的分类方法,而无需使用了不必要的内存.例如,如果只有2%的双子星实际存在,我不想要一个单词bigram使用4亿个特征来获得20000个独特单词.

由于答案也取决于特定的分类器,我最感兴趣的是最大熵模型(liblinear),支持向量机(libsvm)和感知器,但是也欢迎适用于其他模型的答案.

nlp classification machine-learning libsvm

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

用ant编译源树的一部分

假设我在src/tree中有我的源代码(可能在我的测试/树中).说我想只编译那棵树的一部分.我可能想要这样做的原因是多种多样的.作为一个例子,我可能想要创建尽可能小的jar(不包括某些类),或者我可能想要编译的最快的编译时间.我绝对想编译所有的依赖项!

这可以通过以下命令行轻松实现:

javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java
Run Code Online (Sandbox Code Playgroud)

现在,你怎么能用蚂蚁做到这一点?javac ant 任务编译所有内容:

将递归扫描源和目标目录以查找要编译的Java源文件.

可以使用excludesincludes参数,但它们是有问题的.事实上,它似乎是一个有明确设置所有的includes(不是自动的依赖查找),并且即使最差的是排除优先于包括:

当使用包含和排除时,仅使用与至少一个包含模式匹配且与任何排除模式不匹配的文件/目录.

因此,你不能使用

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
            excludes="**/*.java" includes="src/path/to/MyClass.java" />  
Run Code Online (Sandbox Code Playgroud)

因为它不会编译任何东西:-(

有没有办法javac用ant 实现这个简单的命令行?


编辑:谢谢你的回答,萨迪,我接受了,因为它确实以我在这个问题中想知道的方式工作.但是我有几条评论(在你的答案的评论栏中太长了):

1)我确实阅读了文档(参见上面的链接),但目前还不清楚只是includes你实际上也排除了其他一切

2)当你只是includes蚂蚁记录类似的东西

[javac] Compiling 1 source file to /my/path/to/build
Run Code Online (Sandbox Code Playgroud)

即使依赖项使其编译(多)只是一个源文件.

java ant jar javac

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

检查非默认加载器的共享库

ldd是一种检查给定可执行文件正在或将要使用的共享库的简单方法.但是它并不总是按预期工作.例如,请参阅以下shell片段,演示如何"失败"将libreadline"依赖"发现到python二进制文件中

我尝试了很多其他发行版,但我是从Tikanga复制的

$ lsb_release -a
LSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.6 (Tikanga)
Release:        5.6
Codename:       Tikanga
Run Code Online (Sandbox Code Playgroud)

查看ldd默认安装的内容python(来自官方存储库).

$ which python
/usr/bin/python
$ ldd `which python`
    libpython2.4.so.1.0 => /usr/lib64/libpython2.4.so.1.0 (0x00000030e6200000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e0e00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000030e0a00000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00000030ee800000)
    libm.so.6 => /lib64/libm.so.6 (0x00000030e0600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000030e0200000)
    /lib64/ld-linux-x86-64.so.2 (0x00000030dfe00000)
$ ldd `which python` | grep readline
$
Run Code Online (Sandbox Code Playgroud)

没有找到关于readline的内容.现在我从交互式使用中知道这个二进制文件确实具有实际功能,所以不要试图看看它来自何处.

$ python &
[1] 21003
$ Python …
Run Code Online (Sandbox Code Playgroud)

linux shared-libraries ldd

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

在 Android 的 WebView 中放松 MIME 类型检查?或者强制常规 JavaScript 的模块类型?

我正在 Android 中开发应用程序,其中有一个使用Transcrypt用 javascript 和 python 编写的部分(这几乎与我直接用 javascript 开发该部分相同,但我无法完全控制事物的制作方式)。Android 使用WebView在 Activity 中显示该部分。启动它的相关java代码很简单

        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        mWebView.loadUrl("file:///android_asset/AndroidWebView.html");
Run Code Online (Sandbox Code Playgroud)

相关部分AndroidWebView.html类似于Transcript 的 iOS 演示

        <script type="module">
            import * as my_app from "./target/my_app.js"; window.my_app = my_app;
        </script>
Run Code Online (Sandbox Code Playgroud)

该应用程序在模拟器上运行良好,但在真实设备上 WebView 拒绝加载 javascript 并抛出以下错误:

Failed to load module script: The server responded with a non-JavaScript MIME type of "". Strict MIME type checking is enforced for module scripts per HTML spec.
Run Code Online (Sandbox Code Playgroud)

如果我通过将 HTML 更改为强制 MIME 类型 …

javascript android webview

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

Python中的条形图(o情节)3D

我需要以各种形式绘制一些数据.目前我正在使用Matplotlib,我对我能够制作的情节非常满意.

这个问题是如何绘制最后一个.数据类似于"距离表",就像这样(只是更大,我的表是128x128,每个元素仍然有3个或更多的数字).

现在,我的数据比距离表更好"结构化"(我的数据不会像按字母顺序排序的距离表那样"随机"变化),因此3D 条形图,或者其中3个,可能是完美的.我的理解是Matplotlib中缺少这样的图表.

我可以使用(彩色)Countor3d像这些在2D或类似imshow,但它是不是真的很好代表的是什么数据(数据有意义只是在我的128点,没有两个点之间的任何东西) .和酒吧的高度比颜色,IMO更可读.

因此问题:

  1. 是否可以在Matplotlib中创建3D条形图?应该清楚的是,我的意思是使用2D域,而不仅仅是一个带有"虚假"3D渲染的2D条形图,用于美学目的
  2. 如果上一个问题的答案是否定的,那么还有其他一些库可以做到吗?我非常喜欢基于Python的东西,但我对其他Linux友好的可能性也很满意
  3. 如果上一个问题的答案为否,那么您对如何显示该数据有任何建议吗?例如,创建一个包含值的表格,叠加到imshow或其他彩色方式?

python 3d plot matplotlib

6
推荐指数
3
解决办法
5003
查看次数

你如何处理java中的"超级"泛型?

采用以下泛型示例

import java.util.List;
import java.util.ArrayList;

public class GenericsTest {
    private List<Animal> myList;

    public static void main(String args[]) {
        new GenericsTest(new ArrayList<Animal>()).add(new Dog());
    }

    public GenericsTest(List<Animal> list) {
        myList = list;
    }

    public void add(Animal a) {
      myList.add(a);
    }

    public interface Animal {}
    public static class Dog implements Animal {}
    public static class Cat implements Animal {}
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是如你所知,你不能用它构建它

new GenericsTest(new ArrayList<Dog>());
Run Code Online (Sandbox Code Playgroud)

因为,如你所知,add(Animal)可以添加Cats.该建议解决这个问题的方法,即使用通配符也不管用,因为,是的,你可以改变每一个List<Animal>List<? extends Animal>却有着同样的问题:你可以创建GenericsTestList<Cat>再添加Dog秒.

所以我的问题是:有没有一种方便的方法来编写这个类一次,然后将它用于所有可能的Animals …

java generics

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

mtrace for fortran program

我正试图用来mtrace检测fortran程序中的内存泄漏.我正在使用gfortran编译器.有关mtrace的(工作)C示例,请参阅维基百科条目:http://en.wikipedia.org/wiki/Mtrace

我尝试了两种方法,即包装mtrace()和muntrace()并从fortran程序调用它们,以及创建一个直接调用mtrace()和muntrace()的C程序,除了它们之间泄漏的fortran代码.两种方法都无法检测到内存泄漏,但在这里我只介绍后者.

example.c

#include <stdlib.h>
#include <mcheck.h>

extern void leaky_();  // this might be different on your system
    // if it doesn't work, try to run:
    // 1) gfortran leaky.f90 -c
    // 2) nm leaky.o
    // and then change this declaration and its use below

void main() { 
    mtrace();
    leaky_();
    muntrace();
}
Run Code Online (Sandbox Code Playgroud)

leaky.f90

subroutine leaky()
  real, allocatable, dimension(:) :: tmp
  integer :: error
  allocate (tmp(10), stat=error)
  if (error /= 0) then
    print*, "subroutine leaky could …
Run Code Online (Sandbox Code Playgroud)

c gcc fortran memory-leaks mtrace

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

程序统计工具

有没有一个工具可以解析我的源代码(fortran,C或C++)并返回统计数据,如循环次数,平均循环大小,函数数量,函数调用次数,数量,大小和数组类型,变量等?

同样的事情也来不上我的架构很容易地运行

c c++ statistics parsing fortran

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

libsvm模型文件格式

根据这个FAQ,libsvm中的模型格式应该是直截了当的.事实上,当我打电话时,它就是svm-train.例如,a1a数据集的第一个SV 是

 1 3:1 11:1 14:1 19:1 39:1 42:1 55:1 64:1 67:1 73:1 75:1 76:1 80:1 83:1
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我使用easy.py脚本,我的第一个SV最终会:

 512 1:-1 2:-1 3:1 4:-1 5:-1 6:-1 7:-1 8:-1 9:-1 10:-1 11:1 13:-1 14:1 15:-1 16:-1 17:-1 18:-1 19:1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:1 40:-1 41:-1 42:1 43:-1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 …
Run Code Online (Sandbox Code Playgroud)

file-format machine-learning text-files libsvm

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