Как преобразовать вывод asarray обратно в обычный массив в Python? - PullRequest
1 голос
/ 19 февраля 2020

У меня есть некоторый код, который использовал NumPy asarray, и поэтому массив выглядит так:

[[392 200]
 [461 194]
 [392 200]
 [161 202]]

Я хочу преобразовать его обратно в обычный массив с запятыми. Я ожидаю, что это будет выглядеть так:

[[392, 200],
 [461, 194],
 [392, 200],
 [161, 202]]

Какой выход?

Ответы [ 3 ]

3 голосов
/ 19 февраля 2020

Вы, конечно, можете это сделать, взгляните на фрагмент ниже:

import numpy as np

np_array = np.asarray([[392, 200], [461, 194], [392, 200], [161, 202]])
python_list = np_array.tolist()
2 голосов
/ 19 февраля 2020

Возможно, вы путаете фактические структуры данных с их отображениями.

Если я скопирую и вставлю ваш 'обычный массив с запятыми':

In [593]: alist = [[392, 200], 
     ...:  [461, 194], 
     ...:  [392, 200], 
     ...:  [161, 202]] 

Я получу вложенный список, который отображается как:

In [594]: alist                                                                                
Out[594]: [[392, 200], [461, 194], [392, 200], [161, 202]]

Это разделено запятыми, но не разбито на аккуратные строки.

Если из этого я получу массив numpy:

In [595]: arr = np.array(alist)                                                                
In [596]: arr                                                                                  
Out[596]: 
array([[392, 200],
       [461, 194],
       [392, 200],
       [161, 202]])

Дисплей repr массива содержит запятые, но дисплей str пропускает их:

In [597]: print(arr)                                                                           
[[392 200]
 [461 194]
 [392 200]
 [161 202]]

Это тот же массив, та же структура данных, но с разными строками дисплея.

Мы можем получить list из этого с помощью:

In [599]: arr.tolist()                                                                         
Out[599]: [[392, 200], [461, 194], [392, 200], [161, 202]]

Но различия между list и ndarray намного больше, чем отображение запятой или нет.

1 голос
/ 19 февраля 2020

Если вы не хотите преобразовывать в список, вы можете попробовать str.translate, str.maketrans и repr:

>>> import numpy as np
>>> x = [[1,2,3],[4,5,6]]
>>> np.asarray(x)
array([[1, 2, 3],      # <------ repr
       [4, 5, 6]])
>>> print(np.asarray(x))
[[1 2 3]
 [4 5 6]]
>>> s = repr(np.asarray(x))
>>> print(s.translate(
                      str.maketrans({' ': '', '\n': '\n ', ',': ', '}))
                     .strip('array(/)')
          )
[[1, 2, 3], 
 [4, 5, 6]]

Или, очень просто:

>>> print(str(np.asarray(x)).replace(' ',', ').replace('\n, ',',\n '))
[[1, 2, 3],
 [4, 5, 6]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...