9. Array Attributes

There are four array attributes; however, they are only available when using Python 2.2 or later. There are array methods that may be used instead. The attributes are shape, flat, real and imaginary.

shape
Accessing the shape attribute is equivalent to calling the getshape method; it returns the shape tuple. Assigning a value to the shape attribute is equivalent to calling the setshape method.
>>> print a
[[0 1 2]
 [3 4 5]
 [6 7 8]]
>>> print a.shape
(3,3)
>>> a.shape = ((9,))
>>> print a.shape
(9,)

flat
Accessing the flat attribute of an array returns the flattened, or raveled version of that array, without having to do a function call. This is equivalent to calling the getflat method. The returned array has the same number of elements as the input array, but it is of rank-1. One cannot set the flat attribute of an array, but one can use the indexing and slicing notations to modify the contents of the array:
>> print a
[[0 1 2]
 [3 4 5]
 [6 7 8]]
>> print a.flat
0 1 2 3 4 5 6 7 8]
>> a.flat[4] = 100
>> print a
[[  0   1   2]
 [  3 100   5]
 [  6   7   8]]
>> a.flat = arange(9,18)
>> print a
[[ 9 10 11]
 [12 13 14]
 [15 16 17]]

real
imag
imaginary
These attributes exist only for complex arrays. They return respectively arrays filled with the real and imaginary parts of their elements. The equivalent methods for getting and setting these values are getreal, setreal, methodgetimag and methodsetimag. methodgetimaginary and methodsetimaginary are synonyms for methodgetimag and methodsetimag respectively, and .imag is a synonym for .imaginary. The arrays returned are not contiguous (except for arrays of length 1, which are always contiguous). .real, .imag and .imaginary are modifiable:
>>> print x
[ 0.             +1.j               0.84147098+0.54030231j 0.90929743-0.41614684j]
>>> print x.real
[ 0.          0.84147098  0.90929743]
>>> print x.imag
[ 1.          0.54030231 -0.41614684]
>>> x.imag = arange(3)
>>> print x
[ 0.        +0.j  0.84147098+1.j  0.90929743+2.j]
>>> x = reshape(arange(10), (2,5)) + 0j # make complex array
>>> print x
[[ 0.+0.j  1.+0.j  2.+0.j  3.+0.j  4.+0.j]
 [ 5.+0.j  6.+0.j  7.+0.j  8.+0.j  9.+0.j]]
>>> print x.real
[[ 0.  1.  2.  3.  4.]
 [ 5.  6.  7.  8.  9.]]
>>> print x.type(), x.real.type()
D d
>>> print x.itemsize(), x.imag.itemsize()
16 8

Send comments to the NumArray community.