对于启发式预计算表,我需要一个包含1504935936个条目的字节数组.这应该需要大约1.5 GB的内存.
public class Main{
public static void main(String[] args){
byte[] arr = new byte[1504935936];
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我有一个"OutOfMemoryError:Java堆空间"-Exception,如果我给程序2 GB的RAM
java -Xmx2048M Main
Run Code Online (Sandbox Code Playgroud)
同
java -Xmx2153M Main
Run Code Online (Sandbox Code Playgroud)
有用.为什么需要那么多内存?
我想获得当前git-repo的已更改文件列表.这些文件通常在Changes not staged for commit:调用时列出git status.
到目前为止,我已设法连接到存储库,将其拉出并显示所有未跟踪的文件:
from git import Repo
repo = Repo(pk_repo_path)
o = self.repo.remotes.origin
o.pull()[0]
print(repo.untracked_files)
Run Code Online (Sandbox Code Playgroud)
但现在我想显示所有有变化的文件(未提交).任何人都能把我推向正确的方向吗?我查看repo了一段时间的方法和实验的名称,但我找不到正确的解决方案.
显然我可以调用repo.git.status和解析文件,但这根本不优雅.必须有更好的东西.
编辑:现在我考虑一下.更有用的是一个函数,它告诉我单个文件的状态.喜欢:
print(repo.get_status(path_to_file))
>>untracked
print(repo.get_status(path_to_another_file))
>>not staged
Run Code Online (Sandbox Code Playgroud) 我有一堆2D点.你可以在左边的图片上看到它们.它们形成一些带有几个兔子耳朵的戒指.我的目标是找到大的内循环/椭圆,你可以在右侧看到.
什么样的算法对这种情况有用.
我尝试了RANSAC算法的一种变体(取5个随机点,形成一个椭圆,确定一个分数并重复).我以某种方式设计了评分函数,椭圆内部的点得到了很多负点,并且在外面指向,但非常接近得到很多积极点.但结果并不乐观.算法找到了环,但我得到了一些环的随机椭圆,而不是我想要的大内椭圆.
那里有什么好的策略吗?
algorithm geometry point computational-geometry point-clouds
我想用pyparsing解析一些单词和一些数字.简单吧.
from pyparsing import *
A = Word(nums).setResultsName('A')
B = Word(alphas).setResultsName('B')
expr = OneOrMore(A | B)
result = expr.parseString("123 abc 456 7 d")
print result
Run Code Online (Sandbox Code Playgroud)
上面的代码打印出来['123', 'abc', '456', '7', 'd'].一切顺利.现在我想用这些解析的值做一些工作.对于这项任务,我需要知道它们是否匹配A或B.有没有办法区分这两者.
我在一些研究后发现的唯一的东西就是班级的items方法ParseResults.但它只返回[('A', '7'), ('B', 'd')],只有最后两场比赛.
我的计划/目标如下:
for elem in result:
if elem.is_of_type('A'):
# do stuff
elif elem.is_of_type('B'):
# do something else
Run Code Online (Sandbox Code Playgroud)
我如何区分A和B?
在我的pyparsing代码中,我有以下表达式:
exp1 = Literal("foo") + Suppress(Literal("=")) + Word(alphanums+'_-')
exp2 = Literal("foo") + Suppress(Literal("!=")) + Word(alphanums+'_-')
exp = Optional(exp1) & Optional(exp2)
Run Code Online (Sandbox Code Playgroud)
我想将exp2中的foo更改为bar,以便我可以在已解析的数据中区分=和!=.这可能吗?
我有一个大数组(~400.000.000 个条目),其中的整数为 {0, 1, ..., 8}。所以我每个条目需要 4 位。大约 200 MB。
目前我使用字节数组并在每个条目中保存 2 个数字。
我想知道,如果有一个好的方法,来压缩这个数组。我做了一个快速的研究,找到了像 Huffmann 或 LZW 这样的算法。但这些算法都是为了压缩数据,将压缩后的数据发送给某人并解压。
我只想有一个表,内存空间较少,这样我就可以将它加载到 RAM 中。200MB 的桌子很容易装下,但我正在考虑更大的桌子。
重要的是,我仍然能够确定某些位置的值。
有小费吗?
更多信息:我只是做了一些实验,结果发现平均 2.14 个连续数字具有相同的值。有 1 个零,154 个一,10373 个二,385990 个三,8146188 个四,85008968 个五,265638366 个六,70791576 个七和 80 个八。所以超过一半的数字是6s。
我只需要一个快速的 getValue(idx) 函数,setValue(idx, value) 并不重要。
我使用OpenGL,GLEW和GLFW拍摄同一网格的多个图像.网格(三角形)在每次拍摄中都不会改变,只会改变ModelViewMatrix.
这是我的主循环的重要代码:
for (int i = 0; i < number_of_images; i++) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/* set GL_MODELVIEW matrix depending on i */
glBegin(GL_TRIANGLES);
for (Triangle &t : mesh) {
for (Point &p : t) {
glVertex3f(p.x, p.y, p.z);
}
}
glReadPixels(/*...*/) // get picture and store it somewhere
glfwSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我为每个要拍摄的镜头设置/传输三角形顶点.有没有解决方案,我只需要转移一次?我的网格非常大,所以这种转移需要相当长的时间.
我经常需要做一个做而做的循环。目前,我实现了这样的概念:
Instructions part 1 (for instance: read data)
while(Condition){
Instructions part 2 (save data)
Instructions part 1 (read next data)
}
Run Code Online (Sandbox Code Playgroud)
我必须写两次第1部分,这很丑。有可能摆脱重复吗?我想到这样的概念:
do{
Instructions part 1
} while (Condition) do {
Instructions part 2
}
Run Code Online (Sandbox Code Playgroud) python ×3
arrays ×2
c++ ×2
java ×2
pyparsing ×2
python-2.7 ×2
algorithm ×1
compression ×1
geometry ×1
gitpython ×1
glfw ×1
loops ×1
memory ×1
opengl ×1
parsing ×1
performance ×1
point ×1
point-clouds ×1
ram ×1
while-loop ×1