我使用NumPy np.empty()
获取具有随机值的数组,但是当我之前定义普通np.array()
时它不起作用。
这是我使用的两个功能:
import numpy as np
def create_float_array(x):
return np.array([float(x)])
def get_empty_array():
return np.empty((), dtype=np.float).tolist()
我在控制台中写道,只是为了测试get_empty_array()
:
>>> get_empty_array() # Should return a random float
>>> 0.007812501848093234
我对结果感到满意,所以我尝试了一下,但是它并没有达到我想要的效果:
>>> create_float_array(3.1415) # Create a NumPy array with the float given
>>> array([3.1415])
>>> get_empty_array() # Should return another random value in a NumPy array
>>> 3.1415
我不太确定为什么创建NumPy数组会影响np.empty()
方法产生的随机值。显然,它给出的值与np.array()中的值相同,在这种情况下为3.1415
。
请注意,出于测试目的,我选择将np.empty()
的形状保留为空,但实际上它会具有某种形状。
最后,我知道这不是获取随机值的正确方法,但是我需要在程序中使用np.empty()
,但不完全知道为什么会发生这种情况。
答案 0 :(得分:2)
只需要澄清一点:
np.empty
没有给出真正的随机值。 offical NumPy documentation states将包含“未初始化的条目”或“任意数据”:
numpy.empty(shape, dtype=float, order='C')
返回给定形状和类型的新数组,而无需初始化条目。
[...]
返回:
out: ndarray
给定形状,dtype和顺序的未初始化(任意)数据的数组。对象数组将初始化为None。
那么未初始化或任意意味着什么?要了解这一点,您必须了解在创建对象(任何对象)时,需要询问某人(某人可以是NumPy内部,Python内部或您的OS)所需的内存量。
因此,当您创建一个空数组时,NumPy会请求内存。 NumPy数组的内存量将为Python对象带来一些开销,并且需要一定数量的内存来包含数组的值。该内存可能包含任何内容。因此,“未初始化的值”意味着它仅包含您所拥有的内存中的任何内容。
这里发生的只是一个巧合。您创建了一个包含一个浮点数的数组,然后将其打印,然后再次销毁,因为您没有人对其进行引用(尽管这是CPython特定的,但其他Python实现可能不会立即释放内存,而最终会释放它)。然后,创建一个包含一个浮点数的空数组。第二个数组的内存量与第一个内存刚刚释放的内存量相同。这就是巧合的来源:所以也许某些东西(NumPy,Python或您的OS)决定再次为您提供相同的内存位置。