Numpy: конвертировать последнюю ось в список - PullRequest
0 голосов
/ 29 сентября 2019

Пусть массив numpy будет иметь форму (x, y, z).Я хочу, чтобы он был (x, y) в форме, где каждый элемент является списком z-длины: [a, b, c, ..., z] Есть ли способ сделать это с помощью numpy методов?

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Вы можете использовать tolist и назначить предварительно выделенный массив объектов:

import numpy as np

a = np.random.randint(0,10,(100,100,100))

def f():
    A = np.empty(a.shape[:-1],object)
    A[...] = a.tolist()
    return A

f()[99,99]
# [4, 5, 9, 2, 8, 9, 9, 6, 8, 5, 7, 9, 8, 7, 6, 1, 9, 6, 2, 9, 0, 7, 0, 1, 2, 8, 4, 4, 7, 0, 1, 2, 3, 8, 9, 6, 0, 1, 4, 7, 0, 7, 9, 3, 9, 1, 8, 7, 1, 2, 3, 6, 6, 2, 7, 0, 2, 8, 7, 0, 0, 1, 8, 2, 6, 3, 5, 4, 9, 6, 9, 0, 2, 5, 9, 5, 3, 7, 0, 1, 9, 0, 8, 2, 0, 7, 3, 6, 9, 9, 4, 4, 3, 8, 4, 7, 4, 2, 1, 8]
type(f()[99,99])
# <class 'list'>

from timeit import timeit
timeit(f,number=100)*10
# 28.67872992530465
0 голосов
/ 29 сентября 2019

Я не могу себе представить, зачем numpy нужен такой метод.Вот более или менее питоническое решение.

import numpy as np
# an example array with shape [2,3,4] 
a = np.random.random([2,3,4])

# create the target array shaped [2,3] with 'object' type (accepting other types than numbers).
b = np.array([[None for row in mat] for mat in a])
for i in range(b.shape[0]):
   for j in range(b.shape[1]):
      b[i,j] = list(a[i,j])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...