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
例如,在我的机器上,10^6对大约需要3秒:
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
如果不需要那么快,您可以对其进行逐元素迭代,然后应用:
这里是一种假设非负整数成对出现的方法,两个整数之间用一个空格隔开:
例如,在我的机器上,10^6对大约需要3秒:
首先,尝试用空格分割字符串,完成后检查函数numpy.asmatrix()
相关问题 更多 >
编程相关推荐