【发布时间】:2018-12-04 07:43:00
【问题描述】:
从空内存初始化 ndarray 时如何确定符号位?
>>> np.random.randn(3,3)
array([[-0.35557367, -0.0561576 , -1.84722985],
[ 0.89342124, -0.50871646, 1.31368413],
[ 0.0062188 , 1.62968789, 0.72367089]])
>>> np.empty((3,3))
array([[0.35557367, 0.0561576 , 1.84722985],
[0.89342124, 0.50871646, 1.31368413],
[0.0062188 , 1.62968789, 0.72367089]])
这些从空内存初始化的浮点值已经失去了符号†。这是为什么呢?
†注意:这个结果依赖于内存重用的实现细节。问题询问实现在做什么。
【问题讨论】:
-
会不会和最后输出保存到变量
_有关?当我打印它们时,我看到了相同的结果。 -
这(可能)是 numpy.empty 的 entrypoint。我再也看不懂C了,所以只有上帝知道它在做什么。
-
标志信息可能会被独立保存在连续内存中并被
empty丢弃 -
一方面,
np.empty调用不可能重用np.random.randn返回值的缓冲区。由于_变量,randn数组仍然存在。另一方面,我不知道是什么导致了观察到的行为。randn的 implementation 似乎没有使用看起来像那样的暂存数据。 -
看起来显式保存
randn返回值改变了empty结果在我的试验中的结果,但显式保存empty结果没有效果。
标签: python numpy heap-memory