简体   繁体   中英

Simple question about numpy matrix in python

Let's suppose I have a numpy matrix variable called MATRIX with 3 coordinates: (x, y, z).

Is acessing the matrix's value through the following code

myVar = MATRIX[0,0,0]

equal to

myVar = MATRIX[0,0][0]

or

myVar = MATRIX[0][0,0]

?

What about if I have the following code?

myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]

Is the last line equivalent to doing

myVar = MATRIX[myTuple[0], myTuple[1], myScalar]

I have done simple tests and it seems so, but maybe that is not so in all the cases. How do square brackets work in python with numpy matrices? Since day one I felt confused as how they work.

Thanks

I assume you have a array instance rather than a matrix , since the latter only can have two dimensions.

m[0, 0, 0] gets the element at position (0, 0, 0). m[0, 0] gets a whole subarray (a slice), which is itself a array . You can get the first element of this subarray like this: m[0, 0][0] , which is why both syntaxes work (even though m[i, j, k] is preferred because it doesn't have the unnecessary intermediate step).

Take a look at this ipython session:

rbonvall@andy:~$ ipython
Python 2.5.4 (r254:67916, Sep 26 2009, 08:19:36) 
[...]

In [1]: import numpy.random

In [2]: m = numpy.random.random(size=(3, 3, 3))

In [3]: m
Out[3]: 
array([[[ 0.68853531,  0.8815277 ,  0.53613676],
        [ 0.9985735 ,  0.56409085,  0.03887982],
        [ 0.12083102,  0.0301229 ,  0.51331851]],

       [[ 0.73868543,  0.24904349,  0.24035031],
        [ 0.15458694,  0.35570177,  0.22097202],
        [ 0.81639051,  0.55742805,  0.5866573 ]],

       [[ 0.90302482,  0.29878548,  0.90705737],
        [ 0.68582033,  0.1988247 ,  0.9308886 ],
        [ 0.88956484,  0.25112987,  0.69732309]]])

In [4]: m[0, 0]
Out[4]: array([ 0.68853531,  0.8815277 ,  0.53613676])

In [5]: m[0, 0][0]
Out[5]: 0.6885353066709865

It only works like this for numpy array s. Python built-in tuples and lists are not indexable by tuples, just by integers.

无法用另一个元组索引一个元组,因此该代码均无效。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM