为什么删除此源文件中的逗号会导致 HDF5 文件中出现标量数据?
Why does removing a comma in this source file result in a scalar data in the HDF5 file?
f = h5.File("image_data.h5", 'w')
f["horizontal_min"] = horizontal_min,
f["horizontal_max"] = horizontal_max,
f["vertical_min"] = vertical_min,
f["vertical_max"] = vertical_max,
结果
horizontal_max Dataset {1}
horizontal_min Dataset {1}
vertical_max Dataset {1}
vertical_min Dataset {1}
但是如果每行末尾的逗号被删除,如(从 h5ls 输出):
f = h5.File("image_data.h5", 'w')
f["horizontal_min"] = horizontal_min
f["horizontal_max"] = horizontal_max
f["vertical_min"] = vertical_min
f["vertical_max"] = vertical_max
我得到以下信息(h5ls 的输出):
horizontal_max Dataset {SCALAR}
horizontal_min Dataset {SCALAR}
vertical_max Dataset {SCALAR}
vertical_min Dataset {SCALAR}
请注意,数据从 Dataset {1}
更改为 {SCALAR}
。注意逗号不会改变类型,如下所示:
In [3]: type(5.0,)
Out[3]: float
In [4]: type(5.0)
Out[4]: float
为什么会发生这种变化?
在交互式 ipython
会话中:
In [66]: 1,
Out[66]: (1,)
In [67]: 1
Out[67]: 1
加上逗号,值为tuple
,h5py
将保存为一维数组。没有逗号它是一个标量。
在Python中逗号,是tuple
语法的一部分;比 ()
更重要。这不是多余的行结尾。 (;
是一个可选的行结束符)。
上次测试的正确方法:
In [71]: x=1,
In [72]: type(x)
Out[72]: tuple
In [73]: x=1
In [74]: type(x)
Out[74]: int
在 type(1,)
中,逗号是参数元组的一部分。 type
接受 1 或 3 个参数。
type(object_or_name, bases, dict)
f = h5.File("image_data.h5", 'w')
f["horizontal_min"] = horizontal_min,
f["horizontal_max"] = horizontal_max,
f["vertical_min"] = vertical_min,
f["vertical_max"] = vertical_max,
结果
horizontal_max Dataset {1}
horizontal_min Dataset {1}
vertical_max Dataset {1}
vertical_min Dataset {1}
但是如果每行末尾的逗号被删除,如(从 h5ls 输出):
f = h5.File("image_data.h5", 'w')
f["horizontal_min"] = horizontal_min
f["horizontal_max"] = horizontal_max
f["vertical_min"] = vertical_min
f["vertical_max"] = vertical_max
我得到以下信息(h5ls 的输出):
horizontal_max Dataset {SCALAR}
horizontal_min Dataset {SCALAR}
vertical_max Dataset {SCALAR}
vertical_min Dataset {SCALAR}
请注意,数据从 Dataset {1}
更改为 {SCALAR}
。注意逗号不会改变类型,如下所示:
In [3]: type(5.0,)
Out[3]: float
In [4]: type(5.0)
Out[4]: float
为什么会发生这种变化?
在交互式 ipython
会话中:
In [66]: 1,
Out[66]: (1,)
In [67]: 1
Out[67]: 1
加上逗号,值为tuple
,h5py
将保存为一维数组。没有逗号它是一个标量。
在Python中逗号,是tuple
语法的一部分;比 ()
更重要。这不是多余的行结尾。 (;
是一个可选的行结束符)。
上次测试的正确方法:
In [71]: x=1,
In [72]: type(x)
Out[72]: tuple
In [73]: x=1
In [74]: type(x)
Out[74]: int
在 type(1,)
中,逗号是参数元组的一部分。 type
接受 1 或 3 个参数。
type(object_or_name, bases, dict)