问题标签 [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.
python - Cython: Buffer type mismatch, expected 'int' but got 'long'
I'm having trouble passing in this memoryview of integers into this (rather trivial) function. Python is giving me this error:
Can someone help me understand what's going on? Searching around stackoverflow, it seems that it has to do with how python interprets types, and how C interprets types.
This produces the ValueError
from above.
EDIT: Here are some other things I've discovered.
To clarify, this error persists if I declare y
the following ways:
However, it works if I declare y
with
Does anyone want to give a suggestion why this is the case? Would throwing in np.int32
work on different computers? (I use a macbook pro retina, 2013.)
python-3.x - mpi4py 中的共享内存
我使用MPI
( mpi4py
) 脚本(在单个节点上),它适用于非常大的对象。为了让所有进程都可以访问该对象,我通过comm.bcast()
. 这会将对象复制到所有进程并消耗大量内存,尤其是在复制过程中。因此,我想共享指针之类的东西,而不是对象本身。我发现了一些memoryview
有用的特性来促进进程内对象的工作。对象的真实内存地址也可以通过memoryview
对象字符串表示来访问,并且可以像这样分布:
这打印:
这就是为什么我相信必须有一种方法可以在另一个过程中重构对象。但是,我在文档中找不到有关如何执行此操作的线索。
简而言之,我的问题是:是否可以在同一节点上的进程之间共享对象mpi4py
?
numpy - cython memoryview 不比 ndarray 快
我有一个用常规编写的函数numpy ndarray
,另一个用typed memoryview
. 但是,我无法让该memoryview
版本比普通版本运行得更快(不像许多博客,例如memoryview benchmarks)。
任何提高 memoryview 代码速度与 numpy 替代方案的指针/建议将不胜感激!...或者...如果有人能指出任何明显的原因,为什么 memoryview 版本并不比常规 numpy 版本快多少
在下面的代码中有两个函数,它们都接受两个向量bi
并xi
返回一个矩阵。第一个功能shrink_correl
是常规的 numpy 版本,第二个功能shrink_correl2
是 memoryview 替代方案(让文件成为sh_cor.pyx
)。
这是使用以下setup.py
代码编译的
用于测试速度的代码是
我的电脑上的输出是:
使用 memoryview(在上面的代码中)只给我 5% 的速度提升(不像博客中的巨大速度提升)。
python - 使用 memoryview (Python 3.5.0) 更慢的切片分配
我有一个大字节数组 x 并想将它的一部分分配给另一个字节数组 y 的一部分
我认为使用 memoryview 会更快,而且确实
非常快。然而,
需要 5 倍的时间y[::6] = x[:2*10**6:2]
- 我是否遗漏了什么,或者这是否是 Python 中的一个错误?
- 如果我想重复分配已知数量的 0 和 (b) 通常在 Python (a) 中执行此操作的最快方法是什么?
numpy - 类型化的 Memoryview 会增加 numpy.array 的引用计数吗?
下面显示的某些类型的代码导致我在通过 Cython 调用的 C++ 代码中出现内存损坏。我已经设法解决它,但想问什么是最低限度要求是多少。
认为:
CFoo
是一个 C++ 类,其中一些成员set_ptr
采用指向双精度的指针。Cython 类Foo
拥有一个指向CFoo
.- 在某种
bar
方法内Foo
:- 通过调用创建瞬态
numpy.array
, 。a
function_returning_a_numpy_array()
- 创建一个类型化的内存视图
a_view
以供查看a
。 - 一个指针 from
a_view
被发送到CFoo
usingCFoo
的成员set_ptr
。
- 通过调用创建瞬态
片段:
请注意,在这个问题的上下文中,后续调用Foo
将导致CFoo
对该指针进行操作。
很明显,由于没有保存任何内容a
,后续调用Foo
's 成员可以找到a
reclaimed 的内存。我已经通过创建a
一个成员解决了这个问题Foo
。我的问题是:
这会通过使
double *
(设置为&a_view[0]
)成为 的成员来解决Foo
吗?我猜没有。这会通过使
double a_view[:]
(设置为a
)成为 的成员来解决Foo
吗?我在文档中找不到任何解决此问题的方法。
python-3.x - 使用 memoryView 操作大缓冲区
我的应用程序需要一个 C 库。在某些时候,该库提供了一个指向充满二进制结构的大缓冲区的指针。我不想从/复制到大缓冲区。我想通过 bytearray 类的 memoryView 操作缓冲区。
在 Python3.4 中,我尝试将 C 指针输入 ctypes.PyMemoryView_FromMemory 但它似乎返回一个 Int 对象。
将缓冲区地址设置为字节数组的 memoryView 的最佳方法是什么?
如果可能的话,我宁愿不使用 Cython。
谢谢!
python - Cython:释放内存的内存视图
在 Cython 代码中,我可以分配一些内存并将其包装在内存视图中,例如:
如果我现在使用 释放内存PyMem_Free(ptr)
,则尝试访问类似的元素ptr[i]
会引发错误,这是应该的。但是,我可以安全地尝试访问view[i]
(虽然它不会返回原始数据)。
我的问题是:释放指针总是安全的吗?内存视图对象是否以某种方式通知内存被释放,或者我应该以某种方式手动删除视图?此外,即使内存视图引用了内存,是否也能保证释放内存?
python - Cython memoryviews 错误:指定的 memoryview 索引无效
我正在尝试使用 memoryviews 在 cython 中实现标准快速排序。这是我的代码:
但是,在使用标准setup.py
文件和python setup.py build_ext --inplace
命令编译期间,我收到有关 memoryview 访问的多个错误:
有人可以告诉我我做错了什么吗?由于我是 Cython 的新手,因此任何提高性能的技巧都将不胜感激。谢谢!
python - Cython memoryviews:用数组参数包装c函数以传递numpy数组
我正在尝试使用 Cython 用数组参数 ( quick_sort()
) 包装 c 函数,因此我可以将一个 numpy 数组传递给它。我已经在文档、SO 和网络上搜索了一个有效的、最小的示例,但没有找到。我已经尝试了几种可能性,但没有任何进展,所以请帮我弄清楚。这是我的文件:
快速排序.c
快速排序.h
快速排序.pxd
cy_quicksort.pyx
安装程序.py
当我运行python setup.py build_ext --inplace
命令时,它返回以下错误:
我想要实现的是编译它并能够运行,例如:
在此先感谢您的时间!
编辑:
在 DavidW 在 quicksort.pxd 、 cy_quicksort.pyx 中建议的更改并将setup.py文件更改为以下形式后,它按预期工作。
安装程序.py
python - Cython 键入的内存视图:它们到底是什么?
Cython文档很好地解释了它们允许的内容、如何声明它们以及如何使用它们。
但是,我仍然不清楚它们到底是什么。例如,来自 numpy 数组的简单赋值是这样的:
可以使访问/分配my_arr
更快。
幕后发生了什么?Numpy 应该已经以连续的方式分配内存中的元素,那么 memoryviews 是怎么回事呢?貌似没那么多,其实numpy数组的memoryview赋值new_arr
应该相当于
在速度方面。然而,memoryviews 被认为比 numpy 数组缓冲区更通用;你能举一个简单的例子,其中添加的“概括”很重要/有趣吗?
此外,如果我已经分配了一个指针以使事情尽可能快,那么将其转换为类型化的 memoryview 有什么好处?(这个问题的答案可能与上述相同)