如果我有一个带有numpy.int8值的numpy数组,我可以只调用“一个”值中的字符还是仅调用“十”值,而不必将该值转换为字符串?
如果这是我的数组:x = array([[19, 19, 19],[19, 19, 19],[19, 19, 19]],dtype=int8)
有没有一种方法可以只返回1或9,而不将其转换为字符串?
答案 0 :(得分:1)
您不必转换为str
,可以使用整数底数除以10除以在10s处找到数字,并使用模运算符在1s处找到数字:
>>> x = 19
>>> x % 10
9
>>> x // 10
1
这两个操作都是矢量化的,可以应用于整个数组:
>>> x = array([[19, 19, 19],[19, 19, 19],[19, 19, 19]],dtype=int8)
>>> x // 10
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]], dtype=int8)
>>> x % 10
array([[9, 9, 9],
[9, 9, 9],
[9, 9, 9]], dtype=int8)
答案 1 :(得分:0)
您可以使用np.unravel_index
一次获取所有数字:
>>> import numpy as np
>>> from pprint import pprint
>>>
>>> a = np.random.randint(0, 1000, (12,))
### put as many 10s here as there are decimal places
### vvvv
>>> digits = np.unravel_index(a, (10, 10, 10))
>>>
>>> a
array([724, 403, 334, 691, 810, 559, 634, 916, 17, 915, 375, 37])
>>> pprint(digits)
(array([7, 4, 3, 6, 8, 5, 6, 9, 0, 9, 3, 0]),
array([2, 0, 3, 9, 1, 5, 3, 1, 1, 1, 7, 3]),
array([4, 3, 4, 1, 0, 9, 4, 6, 7, 5, 5, 7]))