1

I am creating a ndarray using:

import numpy as np

arr=np.array({1,2})
print(arr, type(arr))

which outputs

{1, 2} <class 'numpy.ndarray'>

If its type is numpy.ndarray, then o/p must be in square brackets like [1,2]? Thanks

FBruzzesi
  • 6,385
  • 3
  • 15
  • 37

4 Answers4

0

Yes, but it's because you put on the function np.array a set and not a list if you try this:

import numpy as np

arr=np.array([1,2]) 
print(arr, type(arr))

you get:

[1 2] <class 'numpy.ndarray'>
FBruzzesi
  • 6,385
  • 3
  • 15
  • 37
Sho_Lee
  • 149
  • 4
0

It returns a numpy array object with no dimensions. A set is an object. It is similar to passing numpy.array a number (without brackets). See the difference here:

arr=np.array([1]) 
arr.shape: (1,)


arr=np.array(1) 
arr.shape: ()

arr=np.array({1,2}) 
arr.shape: ()

Therefore, it treats your entire set as a single object and creates a numpy array with no dimensions that only returns the set object. Sets are not array-like and do not have order, hence according to numpy array doc they are not converted to arrays like you expect. If you wish to create a numpy array from a set and you do not care about its order, use:

arr=np.fromiter({1,2},int)
arr.shape: (2,)
Ehsan
  • 12,072
  • 2
  • 20
  • 33
0

This does something slightly different than you might imagine. Instead of constructing an array with the data you specify, the numbers 1 and 2, you're actually building an array of type object. See below:

>>> np.array({1, 2)).dtype
dtype('O')

This is because sets are not "array-like", in NumPy's terminology, in particular they are not ordered. Thus the array construction does not build an array with the contents of the set, but with the set itself as a single object.

If you really want to build an array from the set's contents you could do the following:

>>> x = np.fromiter(iter({1, 2}), dtype=int)
>>> x.dtype
dtype('int64')

Edit: This answer helps explain how various types are used to build an array in NumPy.

bnaecker
  • 6,152
  • 1
  • 20
  • 33
0

The repr display of ipython may make this clearer:

In [162]: arr=np.array({1,2})                                                                          
In [163]: arr                                                                                          
Out[163]: array({1, 2}, dtype=object)

arr is a 0d array, object dtype, contain 1 item, the set.

But if we first turn the set into a list:

In [164]: arr=np.array(list({1,2}))                                                                    
In [165]: arr                                                                                          
Out[165]: array([1, 2])

now we have a 1d (2,) integer dtype array.

np.array(...) converts list (and list like) arguments into a multdimensional array. A set is not sufficiently list-like.

hpaulj
  • 221,503
  • 14
  • 230
  • 353