gpt4 book ai didi

c++ - 如何在单独的 C++ 插件中操作 python numpy 值

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:02 24 4
gpt4 key购买 nike

我正在尝试将 Python 中的 numpy 数组的数据发送到单独的 C++ 插件。

将我从 __array_interface__['data'][0] 获得的地址发送到 C++ 插件并从那里创建一个双指针是否正确?我假设因为它是一个展平数组,所以所有值都对齐且没有任何间隙。

所以我有一些代码在大约 50 种情况下有效,然后如果我更频繁地运行它,它会变得不稳定并且值变得非常高,就像他会稍微移动一些内存位置,最终它会崩溃。

在 Python 中:

aWeights = np.zeros(100, dtype='float64')
aWeights.fill(0.33)
iDataAddress = aWeights.__array_interface__['data'][0]

然后我将 iDataAddress 发送到 C++,并从中创建一个双指针:

unsigned long int iDataAddress = [code for getting the iAddressFromPython];
double * array = (double*)iDataAddress;
for (int i = 0; i < 100; i++)
MGlobal::DisplayInfo(array[i])

如果我将这两个部分运行大约 50 次,一切都很好。大约 50 次后,它开始不一致地记录错误值。这些值呈指数级增长。在我看来他正在移动一些内存位置,这意味着在内存中数组可能没有完全对齐。

最佳答案

您应该将 ndarray 对象本身传递给扩展函数并使用 NumPy array interface 的 C 版本, 如果不是 standardized interface从而受到启发。这避免了因来自脚本的无效输入而导致 Python 崩溃的可能性。

无论您如何访问数组布局,答案都是:您必须考虑跨步情况,这大概是导致您观察到的不当行为的原因。根据接口(interface)的不同,还有更复杂的情况,例如间接缓冲区对象和 pointer-based multidimensional arrays .您当然可以只检测并拒绝此类阵列,即使功能不全也是安全的。

关于c++ - 如何在单独的 C++ 插件中操作 python numpy 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48037884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com