我在理解Common Lisp函数的性能时遇到了问题(我仍然是新手).我有这个函数的两个版本,它只是计算所有整数的总和n.
非尾递归版:
(defun addup3 (n)
(if (= n 0)
0
(+ n (addup (- n 1)))))
Run Code Online (Sandbox Code Playgroud)
尾递归版:
(defun addup2 (n)
(labels ((f (acc k)
(if (= k 0)
acc
(f (+ acc k) (- k 1)))))
(f 0 n)))
Run Code Online (Sandbox Code Playgroud)
我试图在输入CLISP中运行这些函数n = 1000000.这是结果
[2]> (addup3 1000000)
500000500000
[3]> (addup2 1000000)
*** - Program stack overflow. RESET
Run Code Online (Sandbox Code Playgroud)
我可以在SBCL中成功运行,但非尾递归的更快(只有一点点,但这对我来说似乎很奇怪).我已经搜索了Stackoverflow问题的答案,但找不到类似的东西.为什么我的堆栈溢出虽然尾递归函数被设计为不将所有递归函数调用放在堆栈上?我是否必须告诉解释器/编译器优化尾调用?(我读过类似(proclaim '(optimize (debug 1))设置调试级别并以追踪能力为代价进行优化的内容,但我不知道这是做什么的).也许答案是显而易见的,代码是胡说八道,但我无法弄清楚.感谢帮助.
编辑:danlei指出了拼写错误,它应该是addup3在第一个函数中调用,所以它是递归的.如果纠正,两个版本都会溢出,但不是他的版本
(defun addup (n)
"Adds up the first N integers"
(do ((i …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的测试应用程序,用于从基本矩阵执行平移(T)和旋转(R)估计.
E = K2^T F K1(K1, K2- 内部相机矩阵)提取基本矩阵.UDV^T.并计算restoredR1 = UWV^T,restoredR2 = UW^T.并看到他们中的一个设置为初始[R .
但是,当我计算平移矢量,restoredT = UZU^T我得到规范化的牛逼.
restoredT*max(T.x, T.y, T.z) = T
如何恢复正确的翻译载体?
我一直有这个问题,我想写一个这样的文档字符串:
def foo(arg):
'''Add ``arg`` to the list of :class:`foo.bar.baz.Argument`s.'''
pass
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,Sphinx 会警告说
py:class reference target not found: foo.bar.baz.Argument`s
Run Code Online (Sandbox Code Playgroud)
所以它将s结束反引号之后的作为类名的一部分。这不会发生在像点这样的标点符号上.。除了在类名和 Plural-s 之间添加一个空格(看起来很疯狂)之外,还有什么可以做的吗?
我用来pyreverse从 python 代码创建类图,这会产生如下图:
可以看出,有些类是不相关的。我希望将子图放在彼此下方,以便我可以将图像包含在文档中。
是否有一种简单的方法来修改点文件,以便将图形的断开部分放置在彼此下方?
我刚刚编写了 C++ OpenCV 2.4.7 代码来使用 SurfFeatureDetector 提取立体图像中的特征点。它工作得很好,但是当我意识到点坐标是浮点时我感到困惑,例如它发现坐标 [283.23 123.424] 作为左图像中的特征之一。
这是代码的一部分(简单地提取特征):
int minHessian = 400;
SurfFeatureDetector detector(minHessian);
vector<KeyPoint> featuresLeft, featuresRight;
detector.detect(leftImg, featuresLeft);
detector.detect(rightImg, featuresRight);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这是怎么发生的?内置函数是否涉及任何插值?
opencv image-processing feature-extraction feature-detection
假设我在两个图像之间有良好的对应关系并尝试恢复它们之间的相机运动.我可以使用OpenCV 3的新设施,如下所示:
Mat E = findEssentialMat(imgpts1, imgpts2, focal, principalPoint, RANSAC, 0.999, 1, mask);
int inliers = recoverPose(E, imgpts1, imgpts2, R, t, focal, principalPoint, mask);
Mat mtxR, mtxQ;
Mat Qx, Qy, Qz;
Vec3d angles = RQDecomp3x3(R, mtxR, mtxQ, Qx, Qy, Qz);
cout << "Translation: " << t.t() << endl;
cout << "Euler angles [x y z] in degrees: " << angles.t() << endl;
Run Code Online (Sandbox Code Playgroud)
现在,我无法绕过什么R,t实际上是什么意思.它们是将坐标从相机空间1映射到相机空间2所需的变换,如同p_2 = R * p_1 + t?
考虑这个例子,用地面实况手动标记对应关系

我得到的输出是这样的:
Translation: [-0.9661243151855488, -0.04921320381132761, …Run Code Online (Sandbox Code Playgroud) c++ opencv computer-vision coordinate-transformation structure-from-motion
我在矩阵的 2 个通道中给出了复数值数据(一个是实部,一个是虚部,因此矩阵维度是(height, width, 2),因为 Pytorch 没有原生复数数据类型。我现在想要计算协方差矩阵。适用于 Pytorch 的精简 numpy 计算如下:
def cov(m, y=None):
if m.ndimension() > 2:
raise ValueError("m has more than 2 dimensions")
if y.ndimension() > 2:
raise ValueError('y has more than 2 dimensions')
X = m
if X.shape[0] == 0:
return torch.tensor([]).reshape(0, 0)
if y is not None:
X = torch.cat((X, y), dim=0)
ddof = 1
avg = torch.mean(X, dim=1)
fact = X.shape[1] - ddof
if fact <= 0:
import warnings
warnings.warn("Degrees of freedom <= …Run Code Online (Sandbox Code Playgroud) python covariance complex-numbers matrix-multiplication pytorch
我有一个要推送到PyPi的程序包,某些功能不是程序包,而是可安装的git存储库。我requirements.txt看起来像这样
sphinx_bootstrap_theme>=0.6.5
matplotlib>=2.2.0
numpy>=1.15.0
sphinx>=1.7.5
sphinx-argparse>=0.2.2
tensorboardX
tqdm>=4.24.0
Cython>=0.28.5
# git repos
git+git://github.com/themightyoarfish/svcca-gpu.git
Run Code Online (Sandbox Code Playgroud)
因此,我setup.py具有以下内容:
#!/usr/bin/env python
from distutils.core import setup
import setuptools
import os
with open('requirements.txt', mode='r') as f:
requirements = f.read()
required_pkgs, required_repos = requirements.split('# git repos')
required_pkgs = required_pkgs.split()
required_repos = required_repos.split()
with open('README.md') as f:
readme = f.read()
setup(name=...
...
packages=setuptools.find_packages('.', include=[...]),
install_requires=required_pkgs,
dependency_links=required_repos,
zip_safe=False, # don't install egg, but source
)
Run Code Online (Sandbox Code Playgroud)
但是运行pip install <package>实际上并不会安装git依赖项。我认为pip实际上并没有使用安装脚本。当我python setup.py install手动运行时,它可以工作。 …
我有一个包含std::set<const std::string>成员的类,它在 macOS 上的 Clang 10.0.1 中编译得很好,但在 GCC 5.4.0 中却没有。下面的 MRE
#include <set>
#include <string>
class Foo {
std::set<const std::string> bar; ///<--- error ‘const _Tp* __gnu_cxx::new_allocator<_Tp>::address(__gnu_cxx::new_allocator<_Tp>::const_reference) const [with _Tp = const std::__cxx11::basic_string<char>; __gnu_cxx::new_allocator<_Tp>::const_pointer = const std::__cxx11::basic_string<char>*; __gnu_cxx::new_allocator<_Tp>::const_reference = const std::__cxx11::basic_string<char>&]’ cannot be overloaded
public:
Foo() {}
};
int main(int argc, char *argv[]) {
Foo f;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器调用:
/usr/bin/g++ -std=c++11 test.cpp
Run Code Online (Sandbox Code Playgroud)
相反,如果我使用非常量,string它会起作用。这是过时的标准库版本的问题吗?
我最近总是遇到以下问题:
-march=native.Eigen::Quaternionf。在其他情况下,会EIGEN_UNALIGNED_ASSERT触发 ,这会导致此页面,我在代码中随处观察到其内容(据我所知)我想成为一个好公民,所以我尝试在一个最小的示例上重现该问题,并将其发布在 stackoverflow 或相关问题跟踪器中。然而,当我只提取触发问题的位时,我总是无法重现崩溃。我的猜测是,内存是否对齐(并且不需要特别注意)也取决于问题位置之前分配的内容,因此周围的代码有助于触发问题。
问题:我可以使用哪些技术和工具来有效确定 Linux 和/或 macOS 上的 C+14 中内存对齐相关崩溃的根源?