几年前,我在简要介绍Fortran77之后,正在学习Fortran90.在Fortran中打印整数时,必须指定要为打印整数保留的空格数.考虑这个程序......
implicit none
integer :: i
i = 123
write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding
write(*, '(A, I5, A)') "'", i, "'" !5 is too many, so output is padded
write(*, '(A, I2, A)') "'", i, "'" !2 is too few, so output is jibberish
write(*, '(A, I:, A)') "'", i, "'" !Default behavior
end program
Run Code Online (Sandbox Code Playgroud)
...生成以下输出.
'123'
' 123'
'**'
' 123'
Run Code Online (Sandbox Code Playgroud)
当我不知道整数中有多少位数时,如何为整数打印分配正确的空间量?
更新:如果您的编译器符合F95,您可以使用I0编辑描述符(即,在上面的示例'(A, I0, A)'中为 …
GNU Make包含一个称为的特殊目标.DELETE_ON_ERROR。如果您的Makefile中包含此文件,Make将删除其构建序列以非零返回状态完成的任何目标。这很有用,因此在以后的调用中,Make不会假定目标已正确构建。
这是一个虚拟的例子。
.DELETE_ON_ERROR:
out.dat: in.dat
touch out.dat
false
Run Code Online (Sandbox Code Playgroud)
因为false给出的返回值非零,所以构建被视为失败,并且Make删除了out.dat目标。这是广告和预期的行为。但是,当目标是目录时,似乎不会保留此行为。考虑另一个虚拟的例子。
.DELETE_ON_ERROR:
outdir/: in.dat
mkdir outdir/
false
Run Code Online (Sandbox Code Playgroud)
在这种情况下,构建会再次失败,但是Make不会删除outdir目录。有什么方法可以指示Make进行此操作吗?
我有两个列表x和y,长度为n,x i和y i形成一对.如何在保留配对信息的同时从这两个列表中随机抽取m个值(例如x [10]和y [10]将在结果样本中一起)
我最初的想法是这样的.
代码看起来像这样.
templist = list()
for tup in zip(x, y):
templist.append(tup)
random.shuffle(templist)
x_sub = [a for a, b in templist[0:m]]
y_sub = [b for a, b in templist[0:m]]
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很狡猾.有什么方法可以让我更清晰,更简洁,还是Pythonic?
我在用R.编程.我有一个包含,比如1000个值的向量.现在让我们说我想将这1000个值随机分成两个新的集合,一个包含400个值,另一个包含600个.我怎么能这样做?我想过做这样的事......
firstset <- sample(mydata, size=400)
Run Code Online (Sandbox Code Playgroud)
...但是这不会对数据进行分区(换句话说,我仍然不知道要在另一组中放入哪600个值).我还想过从1到400的循环,一次随机删除1个值并将其放入firstset.这会正确地划分数据,但是如何实现这一点对我来说并不清楚.另外,我被告知尽可能避免forR中的循环.
有任何想法吗?
我正在使用名为BLAST2GO的Java webstart应用程序,我遇到内存分配问题.它需要将大型数据集加载到内存中,所以我一直在尝试为此应用程序分配3-6GB.但是,无论我设置为最大堆大小,它总是使用455MB(如消息栏所示:'内存使用:xxMB为455MB').我已经尝试将其设置为非常合理的级别(1024 MB),但仍然只有455MB的分配.
有任何想法吗?
顺便说一下,我正在使用Ubuntu 10.04 32位,24GB内存,8个触发器.
更新:这是他们提供的JNLP.当我编辑initial-heap-size和max-heap-size属性的值时,我得到相同的结果.
<jnlp spec="1.0+" codebase="http://bioinfo.cipf.es/blast2go/webstart" href="http://bioinfo.cipf.es/blast2go/webstart/makeJnlp.php?mem=3072">
<information>
<title>Blast2GO 3072M</title>
<vendor>CIPF - UPV - IVIA</vendor>
<homepage href="http://www.blast2go.org"/>
<description>Blast2GO 3072M</description>
<description kind="short">Blast2GO 3072M</description>
<icon href="splash.gif"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="64m" max-heap-size="3072M"/>
<jar href="ext/blast2go.jar"/>
<jar href="ext/biojava-1.3.1.jar"/>
<jar href="ext/jfreechart-1.0.10.jar"/>
<jar href="ext/mysql-connector-java-3.0.11-stable-bin.jar"/>
<jar href="ext/zvtm.jar"/>
<jar href="ext/jakarta-regexp-1.4.jar"/>
<jar href="ext/jcommon-1.0.13.jar"/>
<jar href="ext/Simpat1.1.jar"/>
<jar href="ext/iText-2.1.1.jar"/>
<jar href="ext/jdom/activation.jar"/>
<jar href="ext/jdom/ant.jar"/>
<jar href="ext/jdom/jaxen-core.jar"/>
<jar href="ext/jdom/jaxen-jdom.jar"/>
<jar href="ext/jdom/jdom.jar"/>
<jar href="ext/jdom/mail.jar"/>
<jar href="ext/jdom/saxpath.jar"/>
<jar href="ext/jdom/xalan.jar"/> …Run Code Online (Sandbox Code Playgroud) 我正在设计一个我计划在C中实现的程序,我对调用外部程序的最佳方式(在性能方面)有疑问.用户将为我的程序提供文件名,然后我的程序将以该文件作为输入运行另一个程序.然后我的程序将处理另一个程序的输出.
我的典型方法是将其他程序的输出重定向到一个文件,然后让我的程序在完成后读取该文件.但是,据我所知,I/O操作非常昂贵,我希望尽可能提高这个程序的效率.
我做了一点看,我找到了popen运行系统命令和抓取输出的命令.这种方法的性能与我刚才描述的方法的性能相比如何?是popen简单地将外部程序的输出写入临时文件,还是将程序输出保存在内存中?
或者,是否有其他方法可以提供更好的性能?
我有一个包含大量值(53,000,000+)的数据文件,我想提取这些值中n 个的随机子集(例如 2,000,000)。我实现了一个 Perl 脚本,它将列表拉入内存,使用Fisher-Yates 方法对数组进行洗牌,然后打印出洗牌列表中的前n个值。然而,即使在较小的测试集(50,000 个值)上,这种改组过程也需要花费大量时间。
我正在寻找一种更有效、可扩展的方法来识别大量值的随机子集并将其打印出来。有什么建议么?
更新:根据答案和更多搜索,看起来正确的术语是“随机采样”。
给定一个长度为n的字符串,我将如何(伪)随机采样大小为k的m个子串,使得所有采样的子串都不重叠?我的大部分脚本编写经验都在Perl中,但是使用任何通用语言的易于运行的解决方案就足够了.
我有一个制表符分隔的文本文件,我试图用该read.table函数加载到R中.脚本的前几行看起来像这样
#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data <- read.table(args[1], header=TRUE, sep="\t", quote="")
# process the data
Run Code Online (Sandbox Code Playgroud)
这有效.我最初试图让R从标准输入读取数据,但是没有成功.我的第一个方法......
#!/usr/bin/env Rscript
data <- read.table(stdin(), header=TRUE, sep="\t", quote="")
# process the data
Run Code Online (Sandbox Code Playgroud)
......似乎根本没用.我的第二种方法......
#!/usr/bin/env Rscript
data <- read.table("/dev/stdin", header=TRUE, sep="\t", quote="")
# process the data
Run Code Online (Sandbox Code Playgroud)
...读取数据文件,但(由于某种原因,我不明白)前20行左右被破坏,这是一个大问题(特别是因为这些行包含标题信息).有没有办法read.table从标准输入读取?我错过了一些完全明显的东西吗
我正在为 C++ 库编写 Cython 包装器,我想将其作为 Python 包分发。我已经想出了我的包的虚拟版本,如下所示(完整源代码在这里)。
\n\n$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bogus.pyx\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 inc\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bogus.hpp\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bogus.cpp\n$\n$ cat inc/bogus.hpp \n#ifndef BOGUS\n#define BOGUS\n\nclass bogus\n{\nprotected:\n int data;\n\npublic:\n bogus();\n int get_double(int value);\n};\n\n#endif\n$\n$ cat src/bogus.cpp \n#include "bogus.hpp"\n\nbogus::bogus() : data(0)\n{\n\n}\n\nint bogus::get_double(int value)\n{\n data = value * 2;\n return data;\n}\n$ cat bogus.pyx \n# distutils: language = c++\n# distutils: sources = src/bogus.cpp\n# cython: c_string_type=str, c_string_encoding=ascii\n\ncdef extern from \'bogus.hpp\':\n cdef cppclass bogus:\n bogus() except +\n int get_double(int value)\n\ncdef class Bogus:\n cdef bogus b\n def get_double(self, …Run Code Online (Sandbox Code Playgroud)