python - 我通过在列表和数组中附加项目来计算 numpy 数组和普通列表的时间
问题描述
在 numpy 数组中附加项目时,它会引发以下错误 TypeError: Required argument 'object' (pos 1) not found
这是我的代码
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
在交互式会话中测试此代码时,您应该立即发现这一点。如果没有这样的会话来测试代码片段,我从来不会编写 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
两者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)
推荐阅读
- javascript - Socket.io 连接总是假的
- python - TensorFlow TPU | 变量的初始化器来自控制流构造
- sql-server - Django 数据库设置 SERVER 关键字 SQL Server
- makefile - 如何优化 Makefile
- angularjs - 使用 ng-click 和 href="javascript:void(0)" 复制锚标记的链接地址
- python - 从交互式地图中抓取数据
- validation - Haskell - 在验证后继续下一步
- c# - DataGridTemplateColumn 到自动生成的列
- python - 访问具有边缘的节点到igraph python中某个感兴趣的节点
- python - Django:无法在模板中呈现上传的图像