如何将数组的元素转换为数字?蟒蛇

时间:2018-03-07 17:41:45

标签: python arrays numpy

我们说我有一个NumPy数组:x = np.array([1, 2, 3, 4, 5])。如何将此数组转换为整数12345

5 个答案:

答案 0 :(得分:3)

In [8]: import numpy as np

In [9]: a = np.array([1,2,3,4,5])

In [10]: int("".join(map(str, a)))
Out[10]: 12345

答案 1 :(得分:1)

只需将sum()函数与生成器一起使用:

>>> sum(e * 10 ** i for i, e in enumerate(x[::-1]))
12345

或者,或者:

>>> sum(e * 10 ** (len(x) - i-1) for i, e in enumerate(x))
12345

或者您可以再次使用str.join生成器:

>>> int(''.join(str(i) for i in x))
12345

<强>为什么吗

在第一个例子中,我们使用一个生成器将每个数字乘以10得到它在数组中位置的幂,然后我们将它们加在一起得到我们的最终结果。如果我们使用list-comprehension而不是generator来查看发生的情况,可能会更容易看到这一点:

>>> [e * 10 ** i for i, e in enumerate(x[::-1])]
[5, 40, 300, 2000, 10000]

然后从这里可以清楚地看出,通过将这些数字加在一起,我们将得到12345的结果。但是请注意,在使用之前我们必须反转x,否则数字将乘以10的错误幂(即第一个数字将乘以1而不是比10000)。

在第二个代码段中,代码只是使用不同的方法为每个索引获得10的正确功能。我们不是反转数组,而是简单地从xlen(x))的长度中减去索引,再减去一个,这样第一个元素就是10000,而不是100000 。这只是一种替代方案。

最后,最后一种方法应该是相当不言自明的。我们只是将数组中每个数字的字符串化版本连接在一起,然后转换回int以获得我们的结果。

答案 2 :(得分:1)

这是numpy的一种方式:

import numpy as np

x = np.array([1, 2, 3, 4, 5])
f = np.fromiter((10**(len(x)-i) for i in range(1, len(x)+1)), dtype=int)

y = np.sum(x*f)  # 12345

答案 3 :(得分:0)

另一种方法是将数组转换为ifelse(),将所有输出空格替换为除了开头和结尾之外的所有字符和子集,然后最后将其转换为numpy.string

int

运行示例

import numpy as np

x = np.array([1,2,3,4,5])
y = int(np.str(x).replace(' ','')[1:-1])

答案 4 :(得分:0)

In [24]: x
Out[24]: array([1, 2, 3, 4, 5])

In [25]: np.dot(x, 10**np.arange(len(x)-1, -1, -1))
Out[25]: 12345