Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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截断片分配_Python_Arrays_List_Numpy - Fatal编程技术网

Python截断片分配

Python截断片分配,python,arrays,list,numpy,Python,Arrays,List,Numpy,我想知道为什么每当我将浮点数赋给numpy数组时,Python都会将数字截断为整数: import numpy as np lst = np.asarray(list(range(10))) print ("lst before assignment: ", lst) lst[:4] = [0.3, 0.5, 10.6, 0.2]; print ("lst after assignment: ", lst) 输出: lst before assignment: [0 1 2 3 4 5

我想知道为什么每当我将浮点数赋给numpy数组时,Python都会将数字截断为整数:

import numpy as np

lst = np.asarray(list(range(10)))

print ("lst before assignment: ", lst)
lst[:4] = [0.3, 0.5, 10.6, 0.2];
print ("lst after assignment: ", lst)
输出:

lst before assignment:  [0 1 2 3 4 5 6 7 8 9]
lst after assignment:  [ 0  0 10  0  4  5  6  7  8  9]

为什么会这样?由于不需要在语言中指定类型,我无法理解为什么numpy会在分配给数组(包含整数)之前将
float
s转换为
int
s。

在python的本机列表中,numpy数组是类型化的。尽管这在动态类型语言(如python)中可能是违反直觉的,但它源于这样一个事实,即numpy基本上是一个围绕高度优化代码的python包装器

通过将
dtype
关键字参数中所需的数据类型传递给numpy.array构造函数,可以更改numpy数组的数据类型:

 numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
数据类型:数据类型,可选

阵列所需的数据类型。如果未给出,则类型将被确定为在序列中保存对象所需的最小类型。此参数只能用于“向上投射”数组。对于向下广播,请使用.astype(t)方法


在python本机列表的位置,键入了numpy数组。尽管这在动态类型语言(如python)中可能是违反直觉的,但它源于这样一个事实,即numpy基本上是一个围绕高度优化代码的python包装器

通过将
dtype
关键字参数中所需的数据类型传递给numpy.array构造函数,可以更改numpy数组的数据类型:

 numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
数据类型:数据类型,可选

阵列所需的数据类型。如果未给出,则类型将被确定为在序列中保存对象所需的最小类型。此参数只能用于“向上投射”数组。对于向下广播,请使用.astype(t)方法


一旦
numpy,答案就很清楚了。asarray
的签名如下:

numpy.asarray(a, dtype=None, order=None)
如果未设置
dtype
,则根据提供的数据推断。在你的例子中,它是
int
s

如果设置
dtype=np.float32
,则可以使示例正常工作:

import numpy as np

lst = np.asarray(list(range(10)), dtype=np.float32)

print "lst before assignment: ", lst
lst[:4] = [0.3, 0.5, 10.6, 0.2];
print "lst after assignment: ", lst
转让前第一次转让:[0.1.2.3.4.5.6.7.8.9]

分配后的lst:[0.3000001 0.5 10.60000038 0.2 4.5.6。 7.8.9.]


有关更多信息,您可以找到文档。

一旦
numpy,答案就很清楚了。asarray的签名如下:

numpy.asarray(a, dtype=None, order=None)
如果未设置
dtype
,则根据提供的数据推断。在你的例子中,它是
int
s

如果设置
dtype=np.float32
,则可以使示例正常工作:

import numpy as np

lst = np.asarray(list(range(10)), dtype=np.float32)

print "lst before assignment: ", lst
lst[:4] = [0.3, 0.5, 10.6, 0.2];
print "lst after assignment: ", lst
转让前第一次转让:[0.1.2.3.4.5.6.7.8.9]

分配后的lst:[0.3000001 0.5 10.60000038 0.2 4.5.6。 7.8.9.]


有关详细信息,您可以找到文档。

此行为不适用于基本体列表。您将lst初始化为ints,然后
dtype
没有更改,小数部分被截断。@erip您是对的,只是检查了我测试基本体列表时使用的代码。出错此行为不适用于基元列表。您将lst初始化为ints,然后
dtype
没有更改,小数部分被截断。@erip您是对的,只是检查了我测试基元列表时使用的代码。犯了个错误哇,回答得很好。谢谢哇,回答得很好。谢谢注意OP询问的是
numpy.asarray
。你的回答仍然很好,很有道理,但有点不同。请注意,OP询问的是
numpy.asarray
。你的答案仍然很好,很有道理,但有点不同。