python - NumPy 中 out=... 参数和直接重新分配之间的区别
问题描述
以下两个np.dot
对于方形数组会给出相同的结果x
吗?
import numpy as np
x = np.arange(4 * 4).reshape(4, 4)
np.dot(x, x.T, out=x) # method 1
x[:] = np.dot(x, x.T) # method 2
谢谢。
为什么我问:
x += x.T
不一样x += x.T.copy()
我不知道 np.dot 的内部是如何工作的。np.dot 是否同样将 out 参数视为视图?如果 out 是要相乘的矩阵之一,可以吗?
我使用的 numpy 来自 anaconda,它使用 mkl 作为后端。
解决方案
是的,它们是相同的,但在性能方面,我看到整数数组的有趣结果:
import perfplot
def f1(x):
x = x.copy()
np.dot(x, x.T, out=x)
return x
def f2(x):
x = x.copy()
x[:] = np.dot(x, x.T)
return x
perfplot.show(
setup=lambda n: np.arange(n * n).reshape(n, n),
kernels=[f1, f2],
labels=['out=...', 're-assignment'],
n_range=[2**k for k in range(0, 9)],
xlabel='N',
equality_check=np.allclose
)
我曾经perfplot
生成绘图时间。
对于浮点数组,绝对没有区别。
perfplot.show(
setup=lambda n: np.arange(n * n).reshape(n, n).astype(float),
kernels=[f1, f2],
labels=['out=...', 're-assignment'],
n_range=[2**k for k in range(0, 9)],
xlabel='N',
equality_check=np.allclose
)
推荐阅读
- python - 如何爬取所有页面?
- javascript - 事件触发器不是函数
- laravel - 混合内容问题 - 内容必须以 HTTPS 形式提供 || 流明 || 招摇 API
- python - 如何检查python panda中特定范围内的日期时间列?
- botframework - 端点没有收到来自 Skype 频道的请求,但在网络聊天中没问题
- database - 如果在 Oracle 中存在,如何检查索引并删除 + 创建
- sql-server - 我们可以根据 if else 条件将不同的值存储在同一个表中吗
- python - 如何在 python 中创建类似于 Matlab 占用网格的占用网格图
- php - 如何在 Oracle 数据库中正确插入日期时间?
- java - 比较hashmap的两个hashmap