преобразование массива numpy (разделяет int без необходимости преобразования в строку) - PullRequest
0 голосов
/ 19 октября 2018

Если у меня есть массив numpy со значениями numpy.int8, могу ли я вызвать только символ в значении единиц или значение в десятках без необходимости преобразования этого значения в строку?

, если это мой массив: x = array([[19, 19, 19],[19, 19, 19],[19, 19, 19]],dtype=int8)

Есть ли способ вернуть только 1 или 9 без преобразования его в строку?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете использовать 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]))
0 голосов
/ 19 октября 2018

Вам не нужно преобразовывать в str. Вы можете использовать целочисленное деление по полу и разделить на 10, чтобы найти число в месте 10, и использовать оператор модуля, чтобы найти число в месте 1:

>>> 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...