new_dtyp = ny.dtype(finpat.dtype.descr + [('sl','i8'),('diff','i8'),('errtot','i8')])
paterror = ny.array(finpat, dtype=new_dtyp)
我使用的代码虽然有效,但会发出警告信息。鉴于以下......
FutureWarning:具有不同字段名称的结构化数组之间的分配将在numpy 1.14中更改。
以前,dst中的字段将设置为src中具有相同名称的字段的值。在numpy 1.14字段中将被“按位置”分配:dst的第N个字段将被设置为src数组的第N个字段。
有关详细信息,请参阅发行说明
我该怎么做才能注意警告信息。不要沉默它。
答案 0 :(得分:0)
警告与您设置dtype的方式无关,它只是表示从numpy 1.14开始,对象finpat
转换为自定义结构化数组的方式可能与预期。如果finpat中值的字段名称与您定义的new_dtyp
中指定的顺序不同,则适用。
您可以在numpy 1.14发行说明(https://docs.scipy.org/doc/numpy/release.html#multiple-field-indexing-assignment-of-structured-arrays)中找到更多信息。
具有多个字段的结构化数组的索引和分配 已经在很多方面发生了变化,正如先前版本中所警告的那样。
首先,使用多个字段索引结构化数组,例如,
arr[['f1', 'f3']]
,将视图返回到原始数组而不是 复印件。返回的视图将具有相应的额外填充字节 对于原始数组中的中间字段,与1.13中的副本不同, 这会影响arr[['f1', 'f3']].view(newdtype)
等代码。其次,结构化数组之间的分配现在将“通过 位置“而不是”字段名称“。目的地的第N个字段 无论字段名称如何,都将设置为源的第N个字段, 不像numpy版本1.6到1.13中的字段 目标数组设置为相同名称的字段 源数组,如果源没有字段,则为0。
相应地,结构化dtypes中的字段顺序现在 计算dtype相等时很重要。例如,使用dtypes
x = dtype({'names': ['A', 'B'], 'formats': ['i4', 'f4'], 'offsets': [0, 4]}) y = dtype({'names': ['B', 'A'], 'formats': ['f4', 'i4'], 'offsets': [4, 0]})
表达式
x == y
现在将返回False
,与以前不同。这个 在python<中使基于字典的dtype规范如dtype({'a': ('i4', 0), 'b': ('f4', 4)})
危险3.6自dict键顺序 在这些版本中不会保留。从结构化数组到布尔数组的赋值现在提出了一个 ValueError与1.13不同,它始终设置目标 要素
True
。从具有多个字段的结构化数组分配到a 非结构化数组现在引发ValueError。在1.13这复制了 到目的地的第一个源字段。
现在不允许在多字段索引中使用字段“titles”,如 正在重复多字段索引中的字段名称。
用户指南中的结构化数组文档已经过 显着更新以反映这些变化。
答案 1 :(得分:0)
numpy.lib.recfunctions
中的一般策略是按字段名称将数据从原始结构复制到新结构。
举个简单的例子:
In [186]: x = np.array([('one',1),('two',2)], dtype='U3,int')
In [187]: x
Out[187]: array([('one', 1), ('two', 2)], dtype=[('f0', '<U3'), ('f1', '<i4')])
In [188]: y = np.empty(2, dtype=x.dtype.descr+[('three',float)])
In [189]: y
Out[189]:
array([('', 0, 0.), ('', 0, 0.)],
dtype=[('f0', '<U3'), ('f1', '<i4'), ('three', '<f8')])
In [190]: for n in x.dtype.names:
...: y[n] = x[n]
...:
In [191]: y
Out[191]:
array([('one', 1, 0.), ('two', 2, 0.)],
dtype=[('f0', '<U3'), ('f1', '<i4'), ('three', '<f8')])
在1.14中,我得到了一些错误。
In [192]: z = np.array(x, dtype=y.dtype)
ValueError: structures must have the same size
我不记得曾在早期版本中试过这个。