python - 使用 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 中实现吗?提前致谢
解决方案
很简单:
- 将您的数字除以 1、10、100、1000,...四舍五入
- 将结果取模 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)
推荐阅读
- reactjs - React Web App 中私人发布的 AWS Sumerian 场景不包括聊天机器人功能(Polly 和 Lex)
- google-apps-script - 如何在脚本编辑器中将货币从 USD $ 更改为 MYR?
- javascript - 没有变异的数组查找方法
- java - 如何在 Jenkins Pipeline Spock 测试中返回虚拟作业或运行?
- python - Rolling 2 Dice的动态可视化| Python
- optimization - 工人数量的变化将如何影响胶水作业
- python - 在 Gimp python-fu 中调整 RGB 通道的级别?
- janus - 为什么janus会异常crash,好像和libmicrohttpd有关
- python-3.x - 如何在python中使用cx_Oracle模块生成oracle sql语句的html报告?
- oauth-2.0 - Moodle:允许对同一帐户进行双重身份验证(手动和 oidc)