当我运行这段代码
import numpy as np
y = np.arange(1,11)
for i in range(len(y)):
y[i] = y[i] + np.random.normal()
print(y)
我得到了输出
[ 2 1 2 3 2 6 6 7 10 10]
为什么y
中的所有数字都转换为整数?np.random.normal()
显然返回浮点数
就像您的示例中的y
数组隐式地设置为dtype=int
一样。因此,在执行y[i] = y[i] + np.random.normal()
时,相当于int = int + float
;也就是说,在存储float
之前,必须将其类型转换为int
。
您可以通过在创建numpy
数组时手动指定dtype
来绕过此问题。
import numpy as np
y = np.arange(1, 11, dtype=float)
for i in range(len(y)):
y[i] = y[i] + np.random.normal()
print(y)
# Sample output: [ 2.16400377 1.5604771 2.69698066 4.17251939 4.13071869 5.99501597 7.06189783 7.69103035 10.51589948 10.31083259]
尝试一下,y[]的dtype似乎是int32,并且当元素被修改时它不会改变。