问题标签 [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 回答
412 浏览

python - 如何避免 PyObject_to_MemoryviewSlice、GOTREF / DECREF Python API 调用?

我在对我的代码进行 cythonizing 时遇到问题,更具体地说是以下(和类似的)代码片段:

其中 grad_d_im_d_jm(...) 将返回一个双 [:,:] 内存视图。此代码将由 Cython 翻译成以下 C 代码:

当我在循环中执行此操作时,我怀疑 Python API 调用会对我的代码速度产生相当大的影响。

GOTREF / DECREF 调用也发生在其他场合,以及 PyFloat_asFloat:

其中 scalar_product() 返回一个 cdef 浮点数。这个片段被翻译成

我正在运行 Python 2.7.11+ 和 Cython 0.23.4。如果您能告诉我 a) 这与性能无关或 b) 如何解决它,我将不胜感激。如果我能改进这个问题,请告诉我,我很乐意这样做。

0 投票
1 回答
2452 浏览

python - 在 Cython 中对内存视图进行排序

如何在 Cython 中对内存视图进行就地排序?有没有内置函数可以做到这一点?现在我必须改用numpy数组并使用numpy's 排序,这非常慢。

0 投票
0 回答
298 浏览

numpy - numpy.asarray 对 cython memoryview 失败

我在使用 numpy.asarray 和我无法解释的 memoryview 对象时遇到了一些奇怪的行为。这是一个在 jupyter 笔记本中使用 cython 魔法的简短示例——我只是创建了一个函数,它需要两个结构数组缓冲区并返回它们。一个有两个 int,另一个有 long 和一个 int:

现在我在 python 中创建两个数组来传递给这个函数:

两者都作为 MemoryView 对象成功返回。现在我想把它们变成一个 numpy 数组:

我在这里想念什么?为什么第二个结构不起作用?任何提示将非常感谢!

0 投票
1 回答
160 浏览

python-3.x - Python 3:从内存视图返回单个位

使用 python 3.5,我从 PostgreSQL 接收一个字节作为 memoryview。

如何读取此字节的单个位?有没有办法获得这个单字节的按位表示?我想像

应该可以解决问题,但它不适用于内存视图。还有类似的东西

显然不起作用...感谢您的任何提示和支持。

0 投票
0 回答
52 浏览

python - 使用 Cython 优化 Python Scipy 操作

嗨,我想计算相关性(r)值的 3D 矩阵的 p 值并计算完整 p 矩阵的 FDR 阈值(仅根据上三角 p 值计算 FDR)。3D 矩阵很大(208、3544、3544)。目前我使用这些 cython 函数来做到这一点。但是,我想让它更快,如果可能的话,让它使用更少的内存。你能帮我吗?

0 投票
1 回答
2101 浏览

python - Python Memoryview vs Bytearray?

Python2.7什么时候应该使用memoryview?我只是找不到在常规bytearray上使用它的任何好处。此外memoryview不支持字符串方法,这使得它绝对无法使用。我错了吗?

0 投票
1 回答
2623 浏览

python - 使用 memoryview 读取二进制文件

我在下面的代码中读取了一个具有特殊结构的大文件 - 其中有两个需要同时处理的块。我没有在文件中来回寻找,而是加载了这两个包含在memoryview调用中的块

该文件已正确解析,但由于这是我第一次使用 mamoryview 界面,我不确定我是否正确。file_names_block 由 null 终止的 c 字符串组成。

  1. 我的技巧是file_names_block[names_record_index:]使用 memoryview 魔术还是创建一些 n^2 切片?我需要在这里使用islice吗?
  2. 如所见,我只是手动查找空字节,然后继续unpack_from。但是我阅读了如何在 python 中将字节字符串拆分为单独的字节,我可以cast()在内存视图上使用(文档?) - 任何方式使用它(或其他技巧)以字节为单位拆分视图?我可以打电话split('\x00')吗?这会保持内存效率吗?

我希望能深入了解一种正确的方法(在 python 2 中)。

0 投票
1 回答
810 浏览

cython - Cython - 返回任意长度的 Typed MemoryView

我编写了一个 Cython 函数,该函数将数字的列表/类型化内存视图作为参数并返回相同长度的类型化内存视图:

在对其进行了数千次测试后,我开始收到Segmentation fault (core dumped)错误消息。我意识到这是一个内存管理问题,但我找不到如何管理函数返回的类型化内存视图的内存的示例。我发现的唯一有用信息是关于内存分配的信息,它建议将生命周期与result_arrpython 对象联系起来,并使用一种__dealloc__方法来释放内存。

有没有一种方法来管理 memoryview 垃圾收集,它不涉及创建用于释放内存的 python 类?

编辑:我试过这个,它似乎以正确的方式释放内存。

为什么这行得通,是否有更好的方法来管理内存?

0 投票
2 回答
685 浏览

python - 如何在python中打包两个字节数组并从文件中写入/读取

假设说我有字节格式的键和值。我需要将此信息写入文件,然后将其读回以进行重播。最简单的方法是写 len(key)|key|len(value)|value 依此类推。我正在尝试使用 python memoryview 和 struct 编写这个逻辑。

struct 模块中的 pack_into 只接受整数形式的输入。

我无法找到解决此问题的方法。请帮助我解决问题。

0 投票
4 回答
5127 浏览

python - 在字节对象上获取指向python memoryview的指针

我有一个 pythonmemoryview指向一个bytes我想在 cython 中执行一些处理的对象。

我的问题是:

  • 因为bytes对象不可写,cython 不允许从中构造类型化(cython)内存视图
  • 我也不能使用指针,因为我无法获得指向 memoryview 开始的指针

例子:

在蟒蛇中:

在赛通中:

  • cdef char * my_ptr = &array[0]无法编译并显示以下消息:Cannot take address of Python variable
  • cdef char[:] my_view = array在运行时失败并显示以下消息:BufferError: memoryview: underlying buffer is not writable

如何解决这个问题?