numpy array specify a default
我有一个要转换为numpy数组的python列表。我已经为numpy数组定义了数据类型。某些数组值可能为"无"或""。如果numpy数组的相应数据类型值为float或int,则会对这些值发出错误。如果该值为none或"",是否可以说numpy为特定数据类型分配1(或字段指定值)。
例如:下面的代码给出了错误
ValueError:无法将字符串转换为float。
1 2 3 4 5 6 7 8 9 | import re import numpy as np dt = np.dtype([ ('a', np.int32,), ('b', np.float32), ('c', np.int32,), ('d', np.float32), ('e', np.int32,), ]) npar = np.array(('667000', '0', '0', '', ''), dt) |
NPAR的预期输出为:(为d指定0.0,为e指定1作为默认值)
1 | (667000, 0.0, 0, 0.0, 1) |
号
我有很多多维数组要转换。所以性能是需要考虑的重要因素。
让data2.txt为:
1 2 | 667000;0;0;;; 668000;0;0;3;6; |
在
1 | array([(667000, 0.0, 0, 0.0, 1), (668000, 0.0, 0, 3.0, 6)], dtype=...) |
。
替换缺少的值。
这可能有效:
1 2 | s = ('667000', '0', '0', '', '') npar = np.array(tuple([0 if dt.names[x]== 'd' else 1 if dt.names[x]=='e' else s[x] for x in range(0,len(s))]),dt) |
1 2 3 4 5 6 7 8 9 10 11 12 13 | import numpy as np dt = np.dtype([ ('a', np.int32,), ('b', np.float32), ('c', np.int32,), ('d', np.float32), ('e', np.int32,), ]) s = ('667000', '0', '0', '', '') t = np.array(s) if not t[4]: t[4] = 1 t[t==''] = 0 npar = np.array(tuple(t),dt) |
号