arrays - 关于带和不带切片的 numpy 数组分配所用时间的问题
问题描述
NumPy
我试图理解对数组切片的赋值。特别是,如果切片分配比“少切片”分配慢。
例子:
a[0,:10] = 5
vs
a[0:1,:10] = 5
这不经意间让我陷入了我试图比较的境地
a[:,:] = a[:,:] + 1
vs
a = a + 1
我无法理解结果
案例1:数组创建在循环之外
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
out = []
for i in range(50):
ti1 = time.time()
b = b+1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:]+1
tf2 = time.time()
tt2 = tf2 - ti2
out.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out))))
输出:
22
案例 2:数组创建在循环内
out1 = []
for i in range(50):
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
ti1 = time.time()
b = b+1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:]+1
tf2 = time.time()
tt2 = tf2 - ti2
out1.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out1))))
输出:
0
似乎第一次创建数组后,b = b + 1
所花费的时间必然少于b[:,:] = b[:,:] + 1
- 为什么会这样?
b = b + 1
在运行之后和运行一次之后发生了哪些变化b[:,:] = b[:,:] + 1
,它们现在占用的时间大致相同?
解决方案
推荐阅读
- python - 如何混合不平衡的数据集以达到每个标签所需的分布?
- aws-glue - 粘合 ETL 强制数据类型只要
- python - 打印方法和 GIL
- javascript - 受 firebase auth 保护的文章的 Gatsby 模板
- javascript - 当用户单击音频标签中的播放按钮时如何显示消息?
- php - Laravel 5.7:Phpunit 错误 - 调用字符串上的成员函数 getBag()
- android - 引起:android.database.sqlite.SQLiteException:没有这样的表:BOOK(代码1 SQLITE_ERROR)
- google-calendar-api - 删除活动日历的会议数据
- css - 固定移动标题时按钮不起作用
- c++ - 输出错误的种子号