Python ndarray dtype 和缓冲区问题 - returns 不同的值
Python ndarray dtype and buffer question - it returns different values
所以我尝试使用以下代码创建一个 numpy darray 对象:
a = np.ndarray(shape=(3,3),dtype='float32',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这 return 如下:
[[1.4e-43 0.0e+00 2.8e-45]
[0.0e+00 4.2e-45 0.0e+00]
[5.6e-45 0.0e+00 7.0e-45]]
为什么 return 与我指定的值不同?
似乎 float32 正在改变一些东西,因为当 dtype='int' 像:
a = np.ndarray(shape=(3,3),dtype='int',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这 return 是正确的,例如:
[[100 2 3]
[ 4 5 6]
[ 7 8 9]]
为什么当 dtype='float32' 时它不起作用?
在当前状态下 a 只不过是 dtype 'float32' 的随机数数组。
第一种情况的错误是因为您提供的 dtype 不匹配 dtype='float32' 和默认的 dtype='int64'对于 np.array()。
要获得所需的结果,您应该在 np.array() dtype='float32'
中添加参数
a = np.ndarray(size=(3, 3), dtype='float32' buffer=np.array([[100, 2, 3],
[4, 5, 6], [7, 8, 9]], dtype='float32')
[[100., 2., 3.]
[4., 5., 6.]
[7., 8., 9.]]
请记住,a 的数据类型将为浮点数,这就是为什么我们在末尾使用小数。
第二种情况之所以有效,是因为 dtype='int' 是 np.array() 的默认 dtype。所以数据类型匹配并且有效。
所以我尝试使用以下代码创建一个 numpy darray 对象:
a = np.ndarray(shape=(3,3),dtype='float32',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这 return 如下:
[[1.4e-43 0.0e+00 2.8e-45]
[0.0e+00 4.2e-45 0.0e+00]
[5.6e-45 0.0e+00 7.0e-45]]
为什么 return 与我指定的值不同?
似乎 float32 正在改变一些东西,因为当 dtype='int' 像:
a = np.ndarray(shape=(3,3),dtype='int',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这 return 是正确的,例如:
[[100 2 3]
[ 4 5 6]
[ 7 8 9]]
为什么当 dtype='float32' 时它不起作用?
在当前状态下 a 只不过是 dtype 'float32' 的随机数数组。 第一种情况的错误是因为您提供的 dtype 不匹配 dtype='float32' 和默认的 dtype='int64'对于 np.array()。 要获得所需的结果,您应该在 np.array() dtype='float32'
中添加参数 a = np.ndarray(size=(3, 3), dtype='float32' buffer=np.array([[100, 2, 3],
[4, 5, 6], [7, 8, 9]], dtype='float32')
[[100., 2., 3.]
[4., 5., 6.]
[7., 8., 9.]]
请记住,a 的数据类型将为浮点数,这就是为什么我们在末尾使用小数。
第二种情况之所以有效,是因为 dtype='int' 是 np.array() 的默认 dtype。所以数据类型匹配并且有效。