我有一个文件¹,其中n维矩阵存储为:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
精确尺寸存储在元数据中。 4和5由\n
分隔,{em>不分隔。但是,
numpy.fromstring('1 2\n3 4', sep=" ")
确实做了我想要的事情,尽管文档提示不然。我对依赖于与定义的行为不同的实现犹豫不决。
为什么numpy.fromstring("1 2\n3 4", sep=" ")
和numpy.fromstring("1 2\n3 4", sep="\n")
给我(期望的)array([ 1., 2., 3., 4.])
,并且是否有更强大的(如:对应于记录/定义的行为)具有相同的效果?
¹该文档是一个XML文件,其中树中最低元素的文本表示数字数据。我无法控制这种文件格式。
答案 0 :(得分:0)
如果您得到的是您想要的(意味着array([ 1., 2., 3., 4.])
是期望的行为),那么我相信这在numpy.fromstring
的文档中解释,参数部分sep
-
sep:str,可选
如果未提供或等效地为空字符串,则数据将被解释为二进制数据;否则,作为带有十进制数字的ASCII文本。同样在后一种情况下,该参数被解释为分隔数据中的数字的字符串; 元素之间的额外空格也会被忽略。
(强调我的)
在这种情况下, \n
被视为额外空格,因此会被忽略。请注意忽略并不意味着它之前和之后的元素变成单个元素,它们仍然是单独的数字。与\t
类似的示例。
In [16]: np.fromstring('1\t2\t3\t4', sep=" ")
Out[16]: array([ 1., 2., 3., 4.])