我有一个np.array startIdx
来自一个由整数和浮点字段组成的元组列表:
>>> startIdx, someInt, someFloat = np.array(resultList).T
>>> startIdx
array([0.0, 111.0, 333.0]) # 10 to a few 100 positive values of the order of 100 to 10000
>>> round(startIdx[2])
333.0 # oops
>>> help(round)
Round [...] returns an int when called with one argument, otherwise the same type as the number.
>>> round(np.pi)
3
>>> round(np.pi, 2) # the optional argument is the number of decimal digits
3.14
round([0.0, 111.0, 333.0][2]) # to test whether it's specific for numpy arrays.
333
浮动当前工作(作为numpy数组的索引)但产生警告:
VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
我可以通过在一个非常大的记录数组(带有一个int字段''startIdx''
)中收集我的结果来避免从元组到数组的转换(以及int到float)。
我可以使用类似int(. + 0.1)
的东西,这也很难看。 int(round(.))
甚至int(.)
会安全地产生正确的结果吗?
答案 0 :(得分:1)
In [70]: startIdx=np.array([0.0, 111.0, 333.0])
In [71]: startIdx
Out[71]: array([ 0., 111., 333.])
如果您需要整数数组,请使用astype
:
In [72]: startIdx.astype(int)
Out[72]: array([ 0, 111, 333])
不是round
:
In [73]: np.round(startIdx)
Out[73]: array([ 0., 111., 333.])
np.array(resultList)
生成一个float dtype数组,因为有些值是float。 arr=np.array(resultList, dtype='i,i,f')
应该生成一个带有整数和浮点字段的结构化数组,假设resultList
确实是一个元组列表。
startIdx = arr['f0']
那么应该是一个整数dtype数组。
我希望结构化数组的内存使用与浮点数的内存使用相同。