numpy.empty没有手动清除符号位或其他任何东西。符号位就是
malloc返回值的那些位中可能留下的任何垃圾。您看到的效果是由于
numpy.absolute其他地方的通话所致。
关键是,
numpy.empty不要重用
randn返回值的缓冲区。毕竟,由于变量的原因,
randn返回值在
empty创建其数组时仍然有效
_。
numpy.empty正在重用在对第一个数组进行 字符串化
的过程中创建的数组的缓冲区。我相信就是这个:
def fillFormat(self, data): # only the finite values are used to compute the number of digits finite_vals = data[isfinite(data)] # choose exponential mode based on the non-zero finite values: abs_non_zero = absolute(finite_vals[finite_vals != 0]) ...
看到那个
absolute电话吗?就是那个。
这是支持该结论的一些其他测试:
>>> a = numpy.random.randn(3, 3)>>> b = numpy.arange(-5, 4, dtype=float)>>> c = numpy.arange(-5, 13, 2, dtype=float)>>> aarray([[-0.96810932, 0.86091026, -0.32675013], [-1.23458136, 0.56151178, -0.37409982], [-1.71348979, 0.64170792, -0.20679512]])>>> numpy.empty((3, 3))array([[ 0.96810932, 0.86091026, 0.32675013], [ 1.23458136, 0.56151178, 0.37409982], [ 1.71348979, 0.64170792, 0.20679512]])>>> barray([-5., -4., -3., -2., -1., 0., 1., 2., 3.])>>> numpy.empty((3, 3))array([[ 0.96810932, 0.86091026, 0.32675013], [ 1.23458136, 0.56151178, 0.37409982], [ 1.71348979, 0.64170792, 0.20679512]])>>> carray([ -5., -3., -1., 1., 3., 5., 7., 9., 11.])>>> numpy.empty((3, 3))array([[ 5., 3., 1.], [ 1., 3., 5.], [ 7., 9., 11.]])>>> numpy.array([1.0, 0, 2, 3, 4, 5, 6, 7, 8, 9])array([ 1., 0., 2., 3., 4., 5., 6., 7., 8., 9.])>>> numpy.empty((3, 3))array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]])
该
numpy.empty结果通过印刷影响
a和
c,而不是通过创建这些阵列的过程。
b无效,因为它有8个非零元素。最终
array([1.0,0, 2, ...])效果是有影响的,因为即使它有10个元素,它们中恰好有9个也不为零。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)