擅长:python、mysql、java
<p>这里是一种假设非负整数成对出现的方法,两个整数之间用一个空格隔开:</p>
<pre><code>def to_num(x):
y = (x[:,None].view(np.int32)-48)*10**np.arange(x.itemsize//4-1,-1,-1)
splt = y.argmin(1)
z = np.take_along_axis(y.cumsum(1),np.column_stack([splt-1,np.full(*y.shape-np.arange(2))]),1)
z[:,1]+=10**(y.shape[1]-splt-1)*16-z[:,0]
z[:,0]//=10**(y.shape[1]-splt)
end = (y[:,::-1]>=0).argmax(1)
z[:,1]+=np.concatenate([[0],48*np.cumsum(10**np.arange(end.max()))])[end]
z[:,1]//=10**end
return z
</code></pre>
<p>例如,在我的机器上,10^6对大约需要3秒:</p>
<pre><code>from timeit import timeit
x = np.random.randint(0,1000000,(1000000,2))
x = np.array([" ".join(map(str, y)) for y in x.tolist()])
(to_num(x) == [[int(z) for z in y.split()] for y in x.tolist()]).all()
# True
timeit(lambda:to_num(x), number=10)
# 2.9360161621589214
</code></pre>