拆分数字并分配给numpy数组中的行中的元素

拆分数字并分配给numpy数组中的行中的元素,numpy,vectorization,Numpy,Vectorization,如何将数字列表放入2D numpy数组中,其中数组的第二维等于该列表中最大数字的位数?我还希望返回数组的每一行中不属于原始数字的元素都为零 示例: 从列表a=range(01001)中,如何获取以下形式的numpy数组: [[0,0,0,0], [0,0,0,1], [0,0,0,2], ... [0,9,9,8] [0,9,9,9], [1,0,0,0]] 请注意每个数字是如何放置在每行末尾的np.zeros((1000,4))数组中的 NB:一个pythonic的、矢量化的实

如何将数字列表放入2D numpy数组中,其中数组的第二维等于该列表中最大数字的位数?我还希望返回数组的每一行中不属于原始数字的元素都为零


示例:

从列表
a=range(01001)
中,如何获取以下形式的numpy数组:

[[0,0,0,0],
 [0,0,0,1],
 [0,0,0,2],
 ...
 [0,9,9,8]
 [0,9,9,9],
 [1,0,0,0]]
请注意每个数字是如何放置在每行末尾的
np.zeros((1000,4))
数组中的

NB:一个pythonic的、矢量化的实现有望再次出现

样本运行-

In [224]: a = range(0,1001)

In [225]: split_digits(a)
Out[225]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 1],
       [0, 0, 0, 2],
       ..., 
       [0, 9, 9, 8],
       [0, 9, 9, 9],
       [1, 0, 0, 0]])

In [229]: a = np.random.randint(0,1000000,(7))

In [230]: a
Out[230]: array([431921, 871855, 636144, 541186, 410562,  89356, 476258])

In [231]: split_digits(a)
Out[231]: 
array([[4, 3, 1, 9, 2, 1],
       [8, 7, 1, 8, 5, 5],
       [6, 3, 6, 1, 4, 4],
       [5, 4, 1, 1, 8, 6],
       [4, 1, 0, 5, 6, 2],
       [0, 8, 9, 3, 5, 6],
       [4, 7, 6, 2, 5, 8]])

另一个使用熊猫的概念

def pir(a):
    z = int(np.log10(np.max(a)))
    s = pd.Series(a.astype(str))
    zfilled = s.str.zfill(z + 1).sum()
    a_ = np.array(list(zfilled)).reshape(-1, z + 1)
    return a_.astype(int)

使用@Divakar的随机数组

a = np.random.randint(0,1000000,(7))

array([ 57190,  29950, 392317, 592062, 460333, 639794, 983647])

pir(a)

array([[0, 5, 7, 1, 9, 0],
       [0, 2, 9, 9, 5, 0],
       [3, 9, 2, 3, 1, 7],
       [5, 9, 2, 0, 6, 2],
       [4, 6, 0, 3, 3, 3],
       [6, 3, 9, 7, 9, 4],
       [9, 8, 3, 6, 4, 7]])

您可能需要使用
np.max()
等,因为输入可以是列表。再次感谢!这真漂亮。
a = np.random.randint(0,1000000,(7))

array([ 57190,  29950, 392317, 592062, 460333, 639794, 983647])

pir(a)

array([[0, 5, 7, 1, 9, 0],
       [0, 2, 9, 9, 5, 0],
       [3, 9, 2, 3, 1, 7],
       [5, 9, 2, 0, 6, 2],
       [4, 6, 0, 3, 3, 3],
       [6, 3, 9, 7, 9, 4],
       [9, 8, 3, 6, 4, 7]])