Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将numpy数组转换为标准库数组而不分配内存_Python_Arrays_Numpy - Fatal编程技术网

Python 将numpy数组转换为标准库数组而不分配内存

Python 将numpy数组转换为标准库数组而不分配内存,python,arrays,numpy,Python,Arrays,Numpy,有没有一种方法可以将numpy ndarray()转换为标准库数组(),而无需重新分配数据 对于记录,可以使用缓冲区接口将array.array转换为ndarray,因此我希望这种方法是可行的: import numpy import array a_std = array.array('d', [1, 2, 3]) a_np = numpy.ndarray(shape=(3, ), buffer=a_std, dtype='d') a_np[0] = 666. assert a_std[0]

有没有一种方法可以将numpy ndarray()转换为标准库数组(),而无需重新分配数据

对于记录,可以使用缓冲区接口将array.array转换为ndarray,因此我希望这种方法是可行的:

import numpy
import array
a_std = array.array('d', [1, 2, 3])
a_np = numpy.ndarray(shape=(3, ), buffer=a_std, dtype='d')
a_np[0] = 666.
assert a_std[0] == 666.

到目前为止,我最好的猜测是这是不可能的:内存重新分配无法避免

我找到的将numpy数组转换为array.array的最快方法是使用:

使用其他方法进行快速基准测试(使用IPython):


到目前为止,我最好的猜测是这是不可能的:内存重新分配无法避免

我找到的将numpy数组转换为array.array的最快方法是使用:

使用其他方法进行快速基准测试(使用IPython):


尝试使用python-c api,我知道您可以使用python-c api从ctry获取numpy保存数组数据的直接地址,我知道您可以从c获取numpy保存数组数据的直接地址
import numpy
import array
a_np = np.random.uniform(size=(10 * 1000 * 1000))  # 76 MiB
a_std = array.array('d', a_np.tobytes())

numpy.testing.assert_allclose(a_std, a_np)
%timeit a_std = array.array('d', a_np.tobytes())
10 loops, best of 3: 56.8 ms per loop

%timeit a_std = array.array('d', a_np.data)
1 loop, best of 3: 946 ms per loop

%timeit a_std = array.array('d', a_np)
1 loop, best of 3: 1.17 s per loop