Мне нравится использовать np.fromiter
из numpy
, потому что это ресурсоемкий способ создания np.array
объектов. Однако похоже, что он не поддерживает многомерные массивы, которые тоже весьма полезны.
import numpy as np
def fun(i):
""" A function returning 4 values of the same type.
"""
return tuple(4*i + j for j in range(4))
# Trying to create a 2-dimensional array from it:
a = np.fromiter((fun(i) for i in range(5)), '4i', 5) # fails
# This function only seems to work for 1D array, trying then:
a = np.fromiter((fun(i) for i in range(5)),
[('', 'i'), ('', 'i'), ('', 'i'), ('', 'i')], 5) # painful
# .. `a` now looks like a 2D array but it is not:
a.transpose() # doesn't work as expected
a[0, 1] # too many indices (of course)
a[:, 1] # don't even think about it
Как я могу сделать a
многомерным массивом, сохранив при этом такую ленивую конструкцию на основе генераторов?