Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NumPy empty()数组在定义普通NumPy数组后不提供随机浮点_Python_Numpy - Fatal编程技术网

Python NumPy empty()数组在定义普通NumPy数组后不提供随机浮点

Python NumPy empty()数组在定义普通NumPy数组后不提供随机浮点,python,numpy,Python,Numpy,我使用NumPynp.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() 为了测试获取空数组(),我在控制台中写道: &g

我使用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() # 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()
的形状保留为nothing,但实际上它会有一些形状


最后,我知道这不是获取随机值的正确方法,但我需要在我的程序中使用
np.empty()
,但我不知道为什么会出现这种行为。

只是为了澄清这一点:

np.empty
不会给出真正的随机值。声明它将包含“未初始化条目”或“任意数据”:

numpy.empty(shape,dtype=float,order='C')
返回给定形状和类型的新数组,而不初始化条目

[……]

返回: 出:恩达雷

给定形状、数据类型和顺序的未初始化(任意)数据数组。对象数组将初始化为“无”

那么,未初始化或武断意味着什么呢?要理解这一点,您必须理解,当您创建一个对象(任何对象)时,您需要询问某人(某人可以是NumPy内部构件、Python内部构件或您的操作系统)所需的内存量

因此,当您创建一个空数组时,NumPy会请求内存。NumPy数组的内存量对于Python对象和包含数组值的特定内存量来说都是一些开销。那个记忆可能包含任何东西。所以“未初始化值”意味着它只包含内存中的任何内容


这里发生的一切只是巧合。您创建了一个包含一个浮点的数组,然后打印它,然后它再次被销毁,因为您没有保留对它的引用(尽管这是特定于CPython的,但是其他Python实现可能不会立即释放内存,它们只是最终释放内存)。然后创建一个包含一个浮点的空数组。第二个数组的内存量与第一个内存刚刚释放的内存量相同。这里是巧合的地方:所以可能有什么东西(NumPy、Python或您的操作系统)决定再次为您提供相同的内存位置。

为了澄清这一点:

np.empty
不会给出真正的随机值。声明它将包含“未初始化条目”或“任意数据”:

numpy.empty(shape,dtype=float,order='C')
返回给定形状和类型的新数组,而不初始化条目

[……]

返回: 出:恩达雷

给定形状、数据类型和顺序的未初始化(任意)数据数组。对象数组将初始化为“无”

那么,未初始化或武断意味着什么呢?要理解这一点,您必须理解,当您创建一个对象(任何对象)时,您需要询问某人(某人可以是NumPy内部构件、Python内部构件或您的操作系统)所需的内存量

因此,当您创建一个空数组时,NumPy会请求内存。NumPy数组的内存量对于Python对象和包含数组值的特定内存量来说都是一些开销。那个记忆可能包含任何东西。所以“未初始化值”意味着它只包含内存中的任何内容


这里发生的一切只是巧合。您创建了一个包含一个浮点的数组,然后打印它,然后它再次被销毁,因为您没有保留对它的引用(尽管这是特定于CPython的,但是其他Python实现可能不会立即释放内存,它们只是最终释放内存)。然后创建一个包含一个浮点的空数组。第二个数组的内存量与第一个内存刚刚释放的内存量相同。这里是巧合的地方:所以可能有什么东西(NumPy、Python或您的操作系统)决定再次给您相同的内存位置。

我阅读了关于np.empty的文章,发现这个:NumPy.empty(shape,dtype=float,order='C'):返回给定形状和类型的新数组,带有随机值。那么,它不会给出随机值吗?Site:@SurajKothari官方NumPy文档声明
empty
:“返回给定形状和类型的新数组,而不初始化条目。”()。然而,即使你的说法是正确的。它不是一个“好的随机值”,它只是“任何碰巧已经存在的随机值”。如果我丢弃了array@SurajKothari因为它会在你离开函数后被垃圾收集。您不会将该数组分配给全局作用域中的任何名称,因此会释放内存。然后,它会被重新分配到新数组,而新数组恰好是相同的形状。您没有保留对该数组的引用
create\u float\u array(3.1415)
。对于“dumped”,我的意思是您创建了它,但由于您没有保留对它的引用,Python将(立即或最终)对它进行垃圾收集。对于CPython,它是即时的,因此它被创建、打印并立即再次销毁。我阅读了关于np.empty的文章,发现了这个:numpy.empty(shape,dtype=float,order='C'):返回给定形状和类型的新数组,带有随机值。那么,它不会给出随机值吗?Site:@SurajKothari官方NumPy文档声明
empty
:“返回给定形状和类型的新数组,而不初始化条目。”()。然而,即使你的说法是正确的。它不是一个“好的随机值”,它只是“任意随机v”