python(4)用numpy和列表各生成100000个随机数据,并完成各自的求和运算,比较运算时间(提示:可使用time.perf_counter()函数记录时间)。
时间: 2024-03-23 12:41:22 浏览: 54
好的,我可以帮你解决这个问题。
首先,我们需要导入 `numpy` 和 `time` 模块:
```python
import numpy as np
import time
```
然后,我们可以使用 `np.random.rand()` 函数生成 `numpy` 数组,或者使用 `random` 模块生成 Python 列表:
```python
# 生成 numpy 数组
arr_np = np.random.rand(100000)
# 生成 Python 列表
arr_list = [np.random.rand() for _ in range(100000)]
```
接着,我们可以分别使用 `numpy` 的 `sum()` 方法和 Python 的 `sum()` 函数计算数组或列表的和。需要注意的是,由于 `numpy` 计算速度更快,我们需要对 Python 的 `sum()` 函数进行优化,例如使用 `numpy` 的 `fromiter()` 方法将列表转化为数组再进行求和。
```python
# numpy 数组求和
start_np = time.perf_counter()
sum_np = np.sum(arr_np)
end_np = time.perf_counter()
# Python 列表求和
start_list = time.perf_counter()
sum_list = sum(arr_list)
end_list = time.perf_counter()
# 优化后的 Python 列表求和
start_list_opt = time.perf_counter()
sum_list_opt = np.fromiter(arr_list, dtype=np.float).sum()
end_list_opt = time.perf_counter()
```
最后,我们可以比较两种方法的运行时间:
```python
print(f"numpy 数组求和时间:{end_np - start_np:.6f}")
print(f"Python 列表求和时间:{end_list - start_list:.6f}")
print(f"优化后的 Python 列表求和时间:{end_list_opt - start_list_opt:.6f}")
```
完整代码如下:
```python
import numpy as np
import time
# 生成 numpy 数组
arr_np = np.random.rand(100000)
# 生成 Python 列表
arr_list = [np.random.rand() for _ in range(100000)]
# numpy 数组求和
start_np = time.perf_counter()
sum_np = np.sum(arr_np)
end_np = time.perf_counter()
# Python 列表求和
start_list = time.perf_counter()
sum_list = sum(arr_list)
end_list = time.perf_counter()
# 优化后的 Python 列表求和
start_list_opt = time.perf_counter()
sum_list_opt = np.fromiter(arr_list, dtype=np.float).sum()
end_list_opt = time.perf_counter()
# 输出结果
print(f"numpy 数组求和时间:{end_np - start_np:.6f}")
print(f"Python 列表求和时间:{end_list - start_list:.6f}")
print(f"优化后的 Python 列表求和时间:{end_list_opt - start_list_opt:.6f}")
```
希望这个答案对你有所帮助!
阅读全文