使用numpy将整数拆分为数字

时间:2018-06-26 10:30:41

标签: python python-3.x numpy

我有一个问题。有人问过这个问题,但据我所见,从未使用过numpy。 我想将值分割成不同的数字。做些事情,然后返回一个数字。根据以下问题,我可以做我想做的事。 但是我更喜欢用numpy来做。我希望它会更高效,因为我不会前后更改为numpy数组。 参见示例:

示例:

import numpy as np


l = np.array([43365644])  # is input array
n = int(43365644)
m = [int(d) for d in str(n)]
o = np.aslist(np.sort(np.asarray(m)))
p = np.asarray(''.join(map(str,o)))

我尝试过几次服务,但运气不佳。 我有一会儿我使用了split函数,它在终端中起作用了,但是将其添加到脚本中后,它又一次失败了,而且我无法重现以前的工作。

q = np.sort(np.split(l,1),axis=1) 没有错误,但仍然是一个单一的值。

q = np.sort(np.split(l,8),axis=1) 使用这种方法会产生以下错误:

Traceback (most recent call last):
File "python", line 1, in <module>
ValueError: array split does not result in an equal division

是否有某种方式可以在numpy中实现?预先感谢

参考问题:
Turn a single number into single digits Python
Convert list of ints to one number?

1 个答案:

答案 0 :(得分:1)

非常简单:

  1. 将您的电话号码除以1,10,100,1000,...四舍五入
  2. 将结果乘以10

产生

l // 10 ** np.arange(10)[:, None] % 10

或者如果您想要一个适用的解决方案

  • 任何基地
  • 任意数量的数字和
  • 任意数量的尺寸

你可以做

l = np.random.randint(0, 1000000, size=(3, 3, 3, 3))
l.shape
# (3, 3, 3, 3)

b = 10                                                   # Base, in our case 10, for 1, 10, 100, 1000, ...
n = np.ceil(np.max(np.log(l) / np.log(b))).astype(int)   # Number of digits
d = np.arange(n)                                         # Divisor base b, b ** 2, b ** 3, ...
d.shape = d.shape + (1,) * (l.ndim)                      # Add dimensions to divisor for broadcasting
out = l // b ** d % b

out.shape
# (6, 3, 3, 3, 3)