[Numpy-discussion] Creating array containing empty lists

Pauli Virtanen pav at iki.fi
Wed Mar 25 07:29:14 EDT 2009


Wed, 25 Mar 2009 12:04:43 +0100, Jesper Larsen wrote:
> I have a problem with array broadcasting for object arrays and list. I
> would like to create a numpy array containing empty lists (initially - I
> will append to them later):
[clip]
> Is it possible to broadcast a list to all elements of a numpy array? Or
> will I have to loop through it and set the individual elements?

You can use the `fill` method, which will broadcast correctly:

>>> import numpy as np
>>> a = np.empty((5,), dtype=np.object_)
>>> a.fill([])
>>> a
array([[], [], [], [], []], dtype=object)

But note that it's now the *same* list in a[0] and a[1]:

>>> a[0].append('foo')
>>> a
array([['foo'], ['foo'], ['foo'], ['foo'], ['foo']], dtype=object)

You can avoid the loop by vectorizing the list constructor:

>>> a = np.empty((5,), dtype=np.object_)
>>> a.fill([])
>>> a = np.frompyfunc(list,1,1)(a)
>>> a
array([[], [], [], [], []], dtype=object)
>>> a[0].append('foo')
>>> a
array([['foo'], [], [], [], []], dtype=object)

Possibly not any faster or cleaner than the for loop.

-- 
Pauli Virtanen




More information about the NumPy-Discussion mailing list