Вот Векторизованный подход после масштабирования каждого элемента с соответствующим 10-powered
масштабирования и суммированием для имитации эффекта конкатенации -
# Calculate each elements number of digits
pows = np.floor(np.log10(dstacker)).astype(int)+1
# 10 powered scalings needed for each elements except the last column
scale = (10**pows[:,:,1:])[:,:,::-1].cumprod(axis=-1)[:,:,::-1]
# Finally get the concatenated number using the scalings and adding last col
num = ((dstacker[:,:,:-1]*scale).sum(-1) + dstacker[:,:,-1]).ravel()
Оставшейся работы написания 1D
выходного массива num
в файл.
Пример запуска -
In [7]: dstacker
Out[7]:
array([[[ 1, 27, 13],
[27800, 8, 14]],
[[54543, 559, 5],
[ 4, 10, 17776]],
[[ 5, 11, 17],
[ 6, 2, 18]]])
In [8]: pows = np.floor(np.log10(dstacker)).astype(int)+1
...: scale = (10**pows[:,:,1:])[:,:,::-1].cumprod(axis=-1)[:,:,::-1]
...: num = ((dstacker[:,:,:-1]*scale).sum(-1) + dstacker[:,:,-1]).ravel()
...:
In [9]: num
Out[9]: array([ 12713, 27800814, 545435595, 41017776, 51117, 6218])
Это хорошее решение. Любая идея обходного пути, когда один из элементов равен нулю? (Тогда суммарная сумма даст неверные значения) – akilat90