我通过在list和array中添加项来计算numy数组和normal list的时间

2024-10-04 03:15:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在numpy数组中追加项时,它抛出以下错误 TypeError:找不到必需的参数“object”(位置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)

Tags: inimportnumpyforsizetimedefnp
1条回答
网友
1楼 · 发布于 2024-10-04 03:15:50

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

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

您应该在交互式会话中测试此代码时立即发现这一点。在编写Python代码时,如果没有这样一个会话来测试代码块,我永远不会这样做。你知道吗

重复连接是很棘手的。首先,它是缓慢的,因为时间测试将显示。其次,很难创建一个合适的起始数组。您确实需要了解concatenate和数组创建,才能正确地执行此操作。你知道吗

在我把这个函数做对之前,我也尝试了几件事:

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

arrvalue都必须是一维数组。和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)

相关问题 更多 >