我需要在我的一些代码中使用对数函数,但基数并不重要.于是我开始挑之间log(),log2()和log10()通过性能,提供我发现任何显著差异.(我将参照所述功能ln,lb和lg分别地).
为什么我这样烦恼?因为每次迭代的优化算法我会经常调用该函数400,000,000次.这既不是可选的,也不是我的问题的主题.
我设置了一些非常基本的测试,如下所示:
timespec start, end;
double sum = 0, m;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
for (int n = 1; n < INT_MAX; ++n)
{
m = n * 10.1;
sum += log(m);
}
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
cout << "ln=";
cout << diff(start, end).tv_sec << ":" << diff(start, end).tv_nsec << endl;
... // likewise for log2 and log10
Run Code Online (Sandbox Code Playgroud)
(timespec diff(timespec start,timespec end)如果你愿意......)
获得了以下结果:
GCC v4.6.3
-O0
ln=140:516853107
lb=155:878100147
lg=173:534086352 …Run Code Online (Sandbox Code Playgroud) 我有一个有许多价值观的枚举
enum Foo {
Bar = 0x00,
Baz = 0x01,
Qux = 0x02,
...
Quux = 0xFF
}
Run Code Online (Sandbox Code Playgroud)
有时我想将其中一个值的名称写入流中.我可以得出Debug做
writer.write(format!("I am {:?}", Foo::Quux).as_bytes())
Run Code Online (Sandbox Code Playgroud)
这将输出例如I am Quux.那很好,除了那个
实现这一目标的最佳方法是什么?
稍微搞砸了(以及对生成的Makefile的一些编辑),看起来正在发生的是moc没有正确处理MainWindow.h(包括在内main.cpp,MainWindow.cpp除非它与包含它的源文件位于同一文件夹中).
Moc运行MainWindow.cpp,不处理包含,因此没有看到Q_OBJECT宏,因此继续产生一个空的输出文件.我不确定moc通常是进程包含还是只是扫描目录,但无论哪种方式,需要mocing但在其他目录中的头文件都没有被处理!
问题似乎与moc产生的输出有关.在第一种情况下(编译的那个),hello-world_automoc.cpp并moc_MainWindow.cpp生成.hello-world_automoc.cpp好像
/* This file is autogenerated, do not edit*/
#include "moc_MainWindow.cpp"
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,hello-world_automoc.cpp产生了一个看起来像的
/* This file is autogenerated, do not edit*/
enum some_compilers { need_more_than_nothing };
Run Code Online (Sandbox Code Playgroud)
并且根本没有moc_MainWindow.cpp.如果我从cmake手动调用moc而不是在破碎的情况下使用automoc,我确实得到moc_MainWindow.cpp但它是空的.
首先,不,我没有忘记set(CMAKE_AUTOMOC ON).还要注意的是MainWindow的析构函数声明和实现.
当我的目录结构如下所示:
CMakeLists.txt |__ main.cpp |__ MainWindow.cpp |__ MainWindow.h |__ MainWindow.ui
编译工作得很好.
但是,当它看起来像:
helloworld/ |__ CMakeLists.txt |__ src/ | |__ CMakeLists.txt | …
在C中,我可以写int foo[100] = { 7, 8 };,我会得到[7, 8, 0, 0, 0...].
这允许我在数组的开头显式地和简明地选择连续元素组的初始值,并且剩余部分将被初始化,就好像它们具有静态存储持续时间(即,到适当类型的零值).
Rust中有等价物吗?
昨天我遇到了Craig Reynolds的Boids,随后我发现我会用Java实现一个简单的2D版本.我已经根据Conrad Parker的笔记精心制作了一个相当基本的设置.
但是,我得到了一些相当奇怪的(在我看来)行为.目前,我的boids合理地快速移动到粗糙的网格或格子中,然后在现场进行抽搐.我的意思是他们移动一点并且非常频繁地旋转.
目前,我已实施:
最初,我的boids随机分布在屏幕区域(与Parker方法略有不同),它们的速度都指向屏幕区域的中心(请注意,随机初始化的速度会产生相同的结果).更改速度限制值只会改变boids移动到此模式的速度,而不会形成模式.
我认为,这可能是:
预期的行为将更像雷诺兹的boids页面上applet中发生的二维版本,尽管现在我还没有实现任何方法来保持屏幕上的boid.
有没有人遇到过这个?有关原因和/或如何解决的任何想法?如果它有帮助,我可以发布一个.gif的行为.
我正在寻找一种算法来找到点云和球体之间的最佳拟合.
也就是说,我想尽量减少
公式http://img855.imageshack.us/img855/6033/codecogseqn.gif
其中C是球体的中心,r是半径,每个P是我的n个点中的一个点.变量显然是Cx,Cy,Cz和r.在我的情况下,我可以预先获得已知的r,只留下C的组件作为变量.
我真的不想使用任何类型的迭代最小化(例如牛顿方法,Levenberg-Marquardt等) - 我更喜欢一组线性方程或明确使用SVD的解决方案.
我正在进行植绒boids仿真,只是为了好玩,我想稍微优化一下.需要工作的区域是在给定的boid附近找到boids.我认为要做到这一点,某种适合任务的空间数据结构将是我最好的选择(见这里并向下滚动一下.).
无论我采用什么,我都会用Java从头开始实现自己.这样我就可以学到更多关于我选择的数据结构的知识,而不是我刚才调用的一堆库函数.
我知道R-Trees,kd trees和Quadtrees.在我看来,它们都是可行的选择.但我对这些数据结构没有任何经验,我不完全确定最适合我的目的.我不需要这么大规模的任何东西- 我说的可能只有几百个,也许最多只有一千个,而不是一百万个,但请记住,我最终可能最终在Android手机上运行它.
请为此推荐一个数据结构(当然不限于上述内容),并给我一个很好的理由选择它.
是的,我已经看到了这个问题.不,我对答案不满意 - 根本没有任何理由.
哦,另外一件事 - 就像标题所说的那样,这仅仅是针对两个维度的.
我需要在C中生成一些排序的整数数组之间的交集.我知道如何找到两个排序数组之间的交集,但我需要为两个以上的数组执行此操作,有效且无需事先了解数组的数量.我可以对最大数量施加合理的限制 - 现在就说十.这些阵列可以是从几个项目到几十万个项目的任何地方,并且绝不一定是相同的长度.
用于生成两个排序数组的交集的伪代码:
while i < m and j < n do:
if array1[i] < array2[j]:
increment i
else if array1[i] > array2[j]:
increment j
else
add array1[i] to intersection(array1, array2)
increment i
increment j
Run Code Online (Sandbox Code Playgroud)
我正在和C一起工作,我的解释清楚而不是代码.
我有一个n维向量(1xn数据集,它不是图像数据),我想对它应用高斯滤波器.我有Image Processing Toolkit和其他一些(询问你是否需要列表).
据推测,我可以使函数的hsize参数fspecial类似[1 n].我还可以使用imfilter它作为下一步将它应用到我的矢量,还是应该使用其他东西?
我已经看过很多关于如何在Matlab中将高斯滤波器应用于二维图像数据的例子,但我对Matlab作为一个平台仍然相对较新,所以一个例子真的很好.
注意:我目前无法尝试它,看看会发生什么(当前没有安装Matlab的机器上),否则我会先尝试一下,然后才会问我是否遇到了使用fspecial和的问题imfilter.
我决定将一个小的C#.NET应用程序移植到linux上.它使用.NET 4,作者(不是我)决定使用WPF,因为他遇到了Winforms的性能问题.
http://www.mono-project.com/Gui_Toolkits显示了很多可供我使用的选项,但我对C#相对较新,对Mono来说更是如此.我需要它快速,最好是相当轻巧.
你会推荐什么?为什么?
我想知道哪个GUI工具包的性能和移植容易,因为我是Mono的新手,原始的.NET应用程序使用WPF.