python - 我通过在列表和数组中附加项目来计算 numpy 数组和普通列表的时间

标签 python numpy matplotlib data-visualization

在 numpy 数组中追加项目时,抛出以下错误 类型错误:未找到所需参数“对象”(位置 1)

这是我的代码

import numpy as np
import time

list = []
start = time.time()
def normalsqrt(a):

    for b in range(a):
        list.append(b**(1/2))
normalsqrt(1000)
print((time.time() - start) * 1000)


a = np.array()
start = time.time()

def numpy_sqrt(size):
    for b in range(size):
        np.concatenate((a, np.array([a[b]])))

numpy_sqrt(1000)
print((time.time() - start) * 1000)

最佳答案

让我们让您的列表函数自包含:

def normalsqrt(a):
    alist=[]
    for b in range(a):
        alist.append(b**(1/2))
    return alist

In [225]: normalsqrt(3)
Out[225]: [0.0, 1.0, 1.4142135623730951]

ipython中,运行timeit很简单:

In [226]: %timeit normalsqrt(1000)
288 µs ± 278 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
<小时/>

现在介绍连接方法。

首先你的数组初始化是错误的:

In [228]: np.array()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-228-e4f3b47dc252> in <module>()
----> 1 np.array()

TypeError: Required argument 'object' (pos 1) not found

在交互式 session 中测试此代码时,您应该立即发现这一点。如果没有这样的 session 来测试代码片段,我永远不会编写 Python 代码。

重复串联很棘手。首先,正如时间测试所表明的那样,它很慢。其次,很难创建一个合适的起始数组。您确实需要很好地理解连接和数组创建才能正确完成。

在正确使用此功能之前,我也必须尝试一些事情:

def numpy_sqrt(size):
    arr = np.zeros((0,), dtype=int)
    for b in range(size):
        value = np.array([b**(1/2)])
        arr = np.concatenate((arr, value), axis=0)
    return arr

arr 和 value 都必须是一维数组。 concatenate 返回一个新数组;运行不到位。

In [233]: numpy_sqrt(3)
Out[233]: array([0.        , 1.        , 1.41421356])

时间 - 比列表版本慢 26 倍:

In [235]: %timeit numpy_sqrt(1000)
7.92 ms ± 304 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
<小时/>

但是获取相同数组的另一种更简单的方法:

In [237]: np.arange(3)**(1/2)
Out[237]: array([0.        , 1.        , 1.41421356])
In [238]: timeit np.arange(1000)**(1/2)
103 µs ± 22.5 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

关于python - 我通过在列表和数组中附加项目来计算 numpy 数组和普通列表的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733904/

相关文章:

python - 在numpy中创建一个可变长度范围序列的数组的有效方法

python - 将背景图像添加到绘图

python - matplotlib:更改轴

python - 从 bash 终端运行文件时不显示 Matplotlib 图

python - 如何在模板中为文件列表请求 GET 参数?(Django Zip 文件下载问题)

python - 如何将 Pandas 数据框中的每一行乘以不同的值

python - 在 neo4j 中创建关系的有效方法

python - 如何解压从函数返回的元组并将其分配给 DataFrame 的列?

python - NumPy:矩阵点积与 MATLAB 不兼容

python - Matplotlib 3Dplot 尺寸不相等时出现额外线条