[Numpy-discussion] two dimensional array of sets

David Warde-Farley dwf@cs.toronto....
Thu Aug 12 19:18:55 CDT 2010


On 2010-08-12, at 5:54 PM, gerardob wrote:

> As i wrote, the elements of each A[i][j] are sets and not numbers.

Ah, missed that part.

Assuming you don't need/want these sets to be mutable or differently sized, you could do something like this.

Here we make 'n' an array of the numbers 0 to 49, but you could do other things. We immediately reshape it to a 3D array with the 50 elements being the "depth" dimension.

>>>> n = np.arange(50).reshape(1, 1, 50)
>>>> i, j, _ = np.ogrid[1:6, 1:6, 0:1] # adding a dummy dimension

Look in the NumPy docs about "broadcasting" to see why this works the way it does, also have a gander at the contents of the i and j arrays and their .shape properties.

>>>> arr = i**n * j*5 - n
>>>> print arr[0, 0]

[  5   4   3   2   1   0  -1  -2  -3  -4  -5  -6  -7  -8  -9 -10 -11 -12
 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30
 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44]

If you want the sets to be proper Python sets then you might want to look at Ben's reply, but you can accomplish many operations on sets using 1-d NumPy arrays. Have a look at help(np.lib.arraysetops) for a list of functions. 

Also, NumPy can only work with fixed-size data types so if you need to work with numbers bigger than 2^63 - 1 (or smaller than -2^63) than you ought to use Ben's method.

David

David


More information about the NumPy-Discussion mailing list