问题标签 [memoryview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
587 浏览

python - Cythonize 两个小的 numpy 函数,需要帮助

问题

我正在尝试 Cythonize 两个主要处理 numpy ndarrays 的小函数,用于某些科学目的。这两个小函数在遗传算法中被调用了数百万次,占算法花费的大部分时间。

我自己取得了一些进展,并且都运行良好,但我只获得了微小的速度提升(10%)。更重要的是,cython --annotate 表明大部分代码仍在通过 Python。

编码

第一个功能:

这个函数的目的是取回数据片段,它在一个内部嵌套循环中被调用了数百万次。根据 data[1][1] 中的布尔值,我们可以正向或反向获取切片。

第二个功能

这个得到一个 numpy 数组的元组列表,我们希望将数组元素明智地相加,然后对它们进行规范化并获得交集的积分。

任何帮助表示赞赏 - 我尝试使用内存视图,但由于某种原因,代码变得非常非常慢。

0 投票
1 回答
749 浏览

python - memoryview 上的微积分(python 数组)

我打算在 python 数组中使用 memoryview:

但它引发了一个错误:

'*' 的操作数类型无效(双精度;双精度 [:, :])

在这种情况下我能做什么?

0 投票
1 回答
2250 浏览

python - 如何在 cython 中获取类型化内存视图的大小

是否可以在 cython 中获取 MemoryView 的大小?理想情况下,我正在寻找类似arr.shapenumpy 的东西。

0 投票
1 回答
1743 浏览

python - 如何为不连续的内存位置创建内存视图?

我在内存中有一个零散的结构,我想将它作为一个连续的内存视图来访问。有没有一种简单的方法可以做到这一点,或者我应该实施自己的解决方案?

例如,考虑由记录组成的文件格式。每条记录都有一个固定长度的标头,它指定记录内容的长度。更高级别的逻辑结构可能分布在多个记录上。如果它可以将自己的碎片内存位置视为一个简单的连续字节数组,它将更容易实现更高级别的结构。

更新:

至少基于文档的这一部分,python 似乎在内部支持这种“分段”缓冲区类型。但这只是 C API。

更新2:

据我所知,引用的 C API(称为旧式缓冲区)可以满足我的需要,但它现在已被弃用,并且在较新版本的 Python(3.X)中不可用。新的缓冲区协议(在PEP 3118中指定)提供了一种表示缓冲区的新方法。此 API 在大多数用例中更有用(其中,表示的缓冲区在内存中不连续的用例),但不支持这个特定的一个,其中一维数组可以完全自由地布局(多个不同的大小的块)在内存中。

0 投票
1 回答
1574 浏览

cython - 为什么不能腌制cython内存视图?

我有一个使用 memoryview 数组的 cython 模块,即...

我想使用多处理并行运行这个模块。但是我得到了错误:

为什么我不能腌制内存视图,我能做些什么。

0 投票
1 回答
1204 浏览

python - Python numba.jit 类型

我整天都在尝试从 numba 文档中推断出这些类型是如何设置的。我已经掌握了一些方法,但现在我想创建一个函数,它返回一个一维数组和一个二维数组,并采用一堆 args,我很难再进一步:

上面抛出了这些异常:

如果你能告诉我出了什么问题会很好,但是如果你能推荐一个一劳永逸地严格解释这些语法的文档,那就更好了。

感谢您的时间。

亲切的问候,马吕斯

0 投票
1 回答
2503 浏览

python - Cython Memoryview 作为返回值

考虑这个虚拟 Cython 代码:

现在,如果我对此执行cython -a,它会以黄色显示返回语句。我在一个对性能非常关键的程序中做类似的事情,根据分析,这真的减慢了我的代码。那么,为什么 cython 需要 python 来处理这些返回语句呢?带注释的文件给出了提示:

令人惊讶的是,谷歌搜索cython“Memoryview 返回值未初始化”给出的结果为零。

0 投票
1 回答
15393 浏览

python - Cython:将内存视图转换为 NumPy 数组

如何将类型化的内存视图转换为 cython 中的 NumPy 数组?文档有

我把这个作为我的案子

使用这个编译器告诉我:

复制与否并不是决定性的。我找不到任何帮助。

0 投票
1 回答
4798 浏览

python - Cython:我应该使用 np.float_t 而不是 double 类型的内存视图

关于 cython 中的 memoryviews,如果我使用 numpy 浮点数组,使用 NumPy 类型键入视图是否有任何优势,np.float_t而不是简单地做?double

我应该cdef以同样的方式输入然后,例如

0 投票
3 回答
4453 浏览

python - Cython:创建没有 NumPy 数组的内存视图?

由于我发现内存视图既方便又快速,所以我尽量避免在 cython 中创建 NumPy 数组并使用给定数组的视图。但是,有时无法避免,不要更改现有数组而是创建一个新数组。在上层函数中这并不明显,但在经常调用的子程序中却很明显。考虑以下函数

分析告诉我,这里有一些速度 我可以做的是调整函数,因为有时,例如计算这个向量的平均值,有时是总和。所以我可以重写它,求和或取平均值。但是有没有一种方法可以直接以非常小的开销创建内存视图,动态定义大小。像首先使用etc创建 ac 缓冲区,然后在函数结束时将缓冲区转换为 view,传递指针和跨步等等。

malloc

编辑1: 也许对于简单的情况,像这样调整功能是一种可以接受的方法。我只添加了一个参数和求和/取平均值。这样我就不必创建一个数组,并且可以在函数 malloc 中轻松处理。这不会变得更快,不是吗?