Как я могу эффективно конвертировать numpy ndarray в список кортежей? - PullRequest
1 голос
/ 25 марта 2019

Вот этот numpy.ndarray, который у меня есть:

a=[[[ 0.01, 0.02 ]], [[ 0.03, 0.04 ]]]

и я хочу преобразовать его в

a = [(0.01, 0.02), (0.03, 0.04)]

В настоящее время я просто использую следующий цикл for, но я не уверен, достаточно ли он эффективен:

b = []
for point in a:
   b.append((point[0][0], point[0][1]))
print(b)

Я нашел похожий вопрос , но нет кортежей, поэтому предложенный ravel().tolist() подход не сработал для меня здесь.

Ответы [ 2 ]

3 голосов
/ 25 марта 2019
# initial declaration
>>> a = np.array([[[ 0.01, 0.02 ]], [[ 0.03, 0.04 ]]])
>>> a
array([[[0.01, 0.02]],
       [[0.03, 0.04]]])

# check the shape
>>> a.shape
(2L, 1L, 2L)

# use resize() to change the shape (remove the 1L middle layer)
>>> a.resize((2, 2))
>>> a
array([[0.01, 0.02],
       [0.03, 0.04]])

# faster than a list comprehension (for large arrays)
# because numpy's backend is written in C

# if you need a vanilla Python list of tuples:
>>> list(map(tuple, a))
[(0.01, 0.02), (0.03, 0.04)]

# alternative one-liner:
>>> list(map(tuple, a.reshape((2, 2))))
...
2 голосов
/ 25 марта 2019

Вы можете использовать списки, они быстрее, чем для циклов

a = np.array([[[ 0.01, 0.02 ]], [[ 0.03, 0.04 ]]])
print([(i[0][0], i[0][1]) for i in a])  # [(0.01, 0.02), (0.03, 0.04)]

альтернативно:

print([tuple(l[0]) for l in a])  # [(0.01, 0.02), (0.03, 0.04)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...