如何在pythran / numpy中查看-cast/ reinterpret-cast?

egdjgwm8  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在尝试在pythran中执行numpy视图转换(我相信在C/C++土地上将被称为重新解释转换):
下面这个愚蠢的虚构例子使用一个无符号8字节整数数组,将它们重新解释为两倍的无符号4字节整数,将第一个和最后一个切掉(这也没有触及实际数据;它只改变“基址指针”),并再次重新解释为无符号8字节,总的效果是帧移位。(我们将在其他时间担心endianness。

import numpy as np

A = np.arange(5,dtype="u8")
a = A.view("u4")
B = a[1:9].view("u8")
A
# array([0, 1, 2, 3, 4], dtype=uint64)
B
# array([ 4294967296,  8589934592, 12884901888, 17179869184], dtype=uint64)
np.shares_memory(A,B)
# True

我不能让pythran直接翻译这个,因为它不知道.view属性。
有没有办法在pythran中重新解释强制转换数组?

mspsb9vt

mspsb9vt1#

据我所知,在Pythran中没有直接的方法来执行数组的重新解释转换。Pythran不支持numpy.view函数,也没有可以直接使用的等效函数。这只是Pythran的一个限制,因为它只支持numpy功能的一个子集。
最好的办法可能是在Python中使用numpy执行强制转换,然后将结果传递给Pythran函数。如果强制转换操作不是代码中的主要瓶颈,那么这是可行的。
或者你可以使用不同的编译器,如Cython,如果你熟悉的话。

相关问题