python - Python ndarray dtype和缓冲区问题 - 它返回不同的值
问题描述
所以我正在尝试使用以下代码创建一个 numpy darray 对象:
a = np.ndarray(shape=(3,3),dtype='float32',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这将返回以下内容:
[[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]]
为什么它返回的值与我指定的不同?
似乎 float32 正在改变事情,因为当 dtype='int' 像:
a = np.ndarray(shape=(3,3),dtype='int',buffer=np.array([[100,2,3],[4,5,6],[7,8,9]]))
这将返回正确的内容,例如:
[[100 2 3]
[ 4 5 6]
[ 7 8 9]]
为什么当 dtype='float32' 时它不起作用?
解决方案
在当前状态下,a只不过是一个 dtype 为“float32”的随机数数组。第一种情况的错误是因为您为 np.array() 提供的 dtype ='float32'和默认dtype='int64'的 dtype 不匹配。要获得所需的结果,您应该在 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.]]
请记住,dataType 将是浮点数,这就是我们最后使用小数的原因。
第二种情况之所以有效,是因为 dtype='int' 这是 np.array() 的默认 dtype。所以数据类型匹配并且它有效。
推荐阅读
- typescript - 模型没有检测到张量,也没有检测到它们是可训练的
- python - 平均神经网络性能取决于 KFold 交叉验证中使用的折叠数
- c++ - ObjC / C++ 相同的代码具有不同的错误
- javascript - 从按钮传递两个不同的值并选择切换
- react-native - 意想不到的元素
在发现 - c# - 使用为孩子制作的环境扩展 Process.Start 命令的环境变量
- c - fread 二进制文件截断数据
- urlencode - 如何在 URL 中对以下字符串“+”进行编码以打开 PDF 文件
- windows - 为什么 conda 无法在 Windows 上正确安装 tensorflow gpu?
- image - 从 Flutter/Dart 访问受 AWS S3 保护的图像?