gpt4 book ai didi

python - 使用切片的 numpy 数组赋值

转载 作者:太空狗 更新时间:2023-10-29 21:58:35 27 4
gpt4 key购买 nike

如果 b 是 2x2 np.ndarray 并且执行了以下赋值,numpy 在后台做了什么,即它是否将列表 [100, 100] first 转换为 numpy 数组或是不是直接用list[100,100]填入b第一行的值:

 b[1,:] = [100,100]

我可以在文档的哪个位置找到有关此的更多信息?

最佳答案

为了评估执行速度,我们将使用 timeit图书馆。

import timeit
import numpy as np

setup = """
import numpy as np
tmp = np.empty(shape=(1, 100))
values = [i for i in xrange(100)]
"""

stmt1 = """tmp[0, :] = values"""
stmt2 = """
for i, val in enumerate(values):
tmp[0, i] = val
"""

time1 = timeit.Timer(setup=setup, stmt=stmt1)
time2 = timeit.Timer(setup=setup, stmt=stmt2)

print "numpy way :", time1.timeit(number=100000)
print "Python way:", time2.timeit(number=100000)

你可以测试一下,你会发现 numpy 循环快了两倍:

- numpy way : 0.97758197784423828
- Python way: 2.1633858680725098

这是因为有一个阶段,values 中的整数(无限整数)被转换为 64 位 float 。为了只比较循环的速度,可以在设置中预先进行类型转换:

values = np.array([i for i in xrange(100)], dtype=np.float64)

这是我得到的:

numpy way : 0.131125926971
Python way: 2.64055013657

我们注意到 numpy 循环比 Python 循环快 20 倍。

如果您查找vectorized computations in Python ...,您将找到更多信息

关于python - 使用切片的 numpy 数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23638638/

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