具有类似于 Python/NumPy 的数组操作的 C++ 库 [关闭]

Posted

技术标签:

【中文标题】具有类似于 Python/NumPy 的数组操作的 C++ 库 [关闭]【英文标题】:C++ library with array operations similar to Python/NumPy [closed] 【发布时间】:2017-01-25 21:03:17 【问题描述】:

请原谅我提出的问题可能过于宽泛。但是,我的任务非常具体:对 Python 没有太多经验,我想将 Python 代码重写为 C++(OpenCV),我想知道是否有针对某些 C++ 库的良好文档比较(我知道存在 OpenBLAS、Eigen、等)这将允许我相对轻松地重复在原始代码中进行的所有数组操作,这对我使用 OpenCV 来说是一个相当大的挑战。也许有人真的写过关于语法比较的帖子?

Python 代码:

image = im_orig.copy()
# Create input for multiples of net input/output changes.
im_bg_width = int(_np.ceil(
    float(image.shape[1]) * scale_factor / _STRIDE) * _STRIDE)
im_bg_height = int(_np.ceil(
    float(image.shape[0]) * scale_factor / _STRIDE) * _STRIDE)
pad_size = 64
im_bot_pixels = image[-1:, :, :]
im_bot = _np.tile(im_bot_pixels, (pad_size, 1, 1))
image = _np.vstack((image, im_bot))
im_right_pixels = image[:, -1:, :]
im_right = _np.tile(im_right_pixels, (1, pad_size, 1))
image = _np.hstack((image, im_right))
image = _scipy.misc.imresize(image, scale_factor, interp='bilinear')
image = image.astype('float32') - _MEAN

net_input = _np.zeros((im_bg_height, im_bg_width, 3), dtype='float32')
net_input[:min(net_input.shape[0], image.shape[0]),
          :min(net_input.shape[1], image.shape[1]), :] =\
    image[:min(net_input.shape[0], image.shape[0]),
          :min(net_input.shape[1], image.shape[1]), :]

编辑:我想不惜一切代价摆脱对 python 的依赖(尤其是来自 python C++ API),并让程序真正可读,这与 Cython 产生的不同。

【问题讨论】:

您可能想要搜索 C++ 数值库,但请注意,如果您使用 C++ 重写代码以提高性能,您可能会感到失望 — 好的 NumPy 代码往往很快开始与。 @DietrichEpp 谢谢,我知道 NumPy 很快,但不惜一切代价摆脱 Python 是必不可少的。 “不惜一切代价”不应该出现在工程师的词汇中:-) 【参考方案1】:

我认为 Eigen 可能适合你。如果您还没有尝试过(根据您的问题我不知道),您应该看看它。除了非常快(从我收集到的最快中)之外,它还具有非常自然的语法。如果只考虑 C++,它也不会变得更好。

http://eigen.tuxfamily.org

【讨论】:

谢谢!不,我只有 OpenCV 的经验。也许有一些关于在 Eigen 和 NumPy 之间重写的提示?我知道这听起来有点懒惰,但是从一种解决方案切换到另一种解决方案变得非常困难和耗时 你知道你的原始代码是关于什么的,对吧?从数学上讲,它是做什么的?然后你可以从这里开始:eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html 它首先解释基本的矩阵/线性代数的东西...... 至于直接重写指令:我认为这种东西不存在,一般来说也不会很有用。但总的来说,对于 numpy 可以做的所有事情,Eigen 库中应该有一个等效的或至少非常相似的操作。 好的,只要有对等的,我就试试。谢谢!

以上是关于具有类似于 Python/NumPy 的数组操作的 C++ 库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?

python--numpy学习

Python Numpy数组的读入存储操作

Python NumPy 学习记录数组操作

不用循环,python numpy 数组如何对每个元素进行操作?

如何将围绕 C++ 函数的 R 包装器转换为 Python/Numpy