【问题标题】:Split integer into digits using numpy使用 numpy 将整数拆分为数字
【发布时间】:2018-06-26 18:52:44
【问题描述】:

我有一个问题。之前有人问过这个问题,但据我所知,从不使用 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?

【问题讨论】:

    标签: python python-3.x numpy


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 2013-03-21
      • 2011-10-04
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2010-12-26
      • 2017-03-21
      相关资源
      最近更新 更多