Kie*_*unt 3 python arrays numpy rounding
说我有一个数组:
values = np.array([1.1,2.2,3.3,4.4,2.1,8.4])
Run Code Online (Sandbox Code Playgroud)
我想将这些值舍入到任意数组的成员,比如说:
rounds = np.array([1.,3.5,5.1,6.7,9.2])
Run Code Online (Sandbox Code Playgroud)
理想情况下返回一个圆形数字数组和一个残差数组:
rounded = np.array([1.,1.,3.5,5.1,1.,9.2])
residues = np.array([-0.1,-1.2,0.2,0.7,-1.1,0.6])
Run Code Online (Sandbox Code Playgroud)
有这样一个好的pythonic方式吗?
一种选择是这样的:
>>> x = np.subtract.outer(values, rounds)
>>> y = np.argmin(abs(x), axis=1)
Run Code Online (Sandbox Code Playgroud)
然后,rounded和residues分别是:
>>> rounds[y]
array([ 1. , 1. , 3.5, 5.1, 1. , 9.2])
>>> rounds[y] - values
array([-0.1, -1.2, 0.2, 0.7, -1.1, 0.8])
Run Code Online (Sandbox Code Playgroud)
本质上x是每个值的二维数组values减去每个值rounds.y是每行最小绝对值索引的一维数组x.这y随后被用于索引rounds.
我应该通过注意如果len(values) * len(rounds)它很大(例如开始超过10e8)来回答这个问题,那么内存使用可能会开始变得令人担忧.在这种情况下,您可以考虑y迭代地构建,以避免必须分配大块内存x.