首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >numpy.asarray()在类型化MemoryView对象上的性能如何?

numpy.asarray()在类型化MemoryView对象上的性能如何?
EN

Stack Overflow用户
提问于 2021-02-19 22:24:31
回答 1查看 71关注 0票数 1

假设我有以下Cython代码:

代码语言:javascript
运行
复制
cimport cython
cimport numpy as np
import numpy as np

cdef np.int64_t[:] view = np.zeros(1000, dtype=np.int64)
array = np.asarray(view)

np.asarray()在引擎盖下做什么,它有多快?此操作的速度是否取决于数组的大小?通过从一开始就保留原始ndarray对象来避免这种情况通常是个好主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-01 11:02:23

我现在给asarray()设定了基准:

asarray_benchmark.pyx

代码语言:javascript
运行
复制
cimport cython
cimport numpy as np

import numpy as np


ctypedef np.int32_t int32


def no_op(int32[:] a):
    pass

def as_array(int32[:] a):
    np.asarray(a)

main.py

代码语言:javascript
运行
复制
from asarray_benchmark import no_op, as_array

import time
N = 1_000_000
now = time.time_ns()
array = np.zeros(100_000_000, dtype=np.int32)
for _ in range(N):
    no_op(array)
print(f"noop:    {(time.time_ns() - now) / N :>12.3f} ns")
for _ in range(N):
    as_array(array)
print(f"asarray: {(time.time_ns() - now) / N :>12.3f} ns")

结果:

代码语言:javascript
运行
复制
noop:         317.934 ns
asarray:     1498.773 ns

看来np.asarray()要在我的笔记本上运行1μ。这似乎与数组的形状和大小无关,表明没有复制实际的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66285789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档