2017-01-02 2 views
0

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

# Defining the data objects: 
d1 = [numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)] 
d2 = [numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)] 

# The operation I want to perform: 
d3 = [a1 + 2*a2 for a1, a2 in zip(d1, d2)] 

# What I really would like to write: 
d3 = d1 + 2*d2 # (not valid for lists of arrays) 

Что это самый простой способ для определения объектов d1 и d2, чтобы я мог использовать последнюю строку?

Причина, по которой я прошу, состоит в том, что я хочу повторно использовать код, предполагающий, что d1 и d2 - это простые массивы numpy, которые можно добавить и масштабировать.

+0

@Moses Koledoye: Формы массивов совпадение. См. Пример. –

+0

Обратите внимание на 'shape' и' dtype' при создании массива из этих списков. Так как подмассивы отличаются по форме, комбинация будет 1d массивом объектов массива, а не многомерным массивом поплавков. Некоторые, но не все, numpy math распространяется через эти объекты. – hpaulj

ответ

1

Просто определив их как numpy.array работ:

d1 = numpy.array([numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)]) 
d2 = numpy.array([numpy.random.rand(n**2).reshape(n, n) for n in range(1, 5)]) 
d3 = d1 + 2 * d2 

Или, если вы хотите сохранить d1 и d2 как обычные списки, которые можно использовать numpy.asarray:

d1_ = numpy.asarray(d1) 
d2_ = numpy.asarray(d2) 
d3 = d1_ + 2 * d2_ 
+0

Что делает 'asarray', это другое? – hpaulj

+0

@hpaulj ничего. Я просто имел в виду это как вариант, если у вас уже есть списки, которые хранятся где-то и не хотят менять определяющие строки – glS

Смежные вопросы