我们说我有一个NumPy数组:x = np.array([1, 2, 3, 4, 5])
。如何将此数组转换为整数12345
?
答案 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
的正确功能。我们不是反转数组,而是简单地从x
(len(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