2009-11-30 52 views
0

我们假设我有一个叫做MATRIX的numpy矩阵变量,它有3个坐标:(x,y,z)。关于Python中numpy矩阵的简单问题

通过下面的代码

myVar = MATRIX[0,0,0] 

等于

myVar = MATRIX[0,0][0] 

myVar = MATRIX[0][0,0] 

acessing矩阵的值?

如果我有以下代码呢?

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

是行相当于做

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

我做了简单的测试,它显得那么最后,但也许事实并非如此在所有情况下。方括号如何使用numpy矩阵在Python中工作?从第一天起,我就感到困惑,因为他们的工作方式。

感谢

+1

确定吗?当我尝试这些时,我得到一个'TypeError'。如果你有一个元组'MYTUPLE =(1,2,3)',那么唯一可能的索引是'MYTUPLE [0]','MYTUPLE [1]'和'MYTUPLE [2]'。 – 2009-11-30 21:16:55

+0

对不起,现在我明白了,这是我所指的numpy矩阵。 – 2009-11-30 21:20:40

回答

6

我假设你有一个array实例而不是matrix,因为后者只能有两个维度。

m[0, 0, 0]获取位置(0,0,0)处的元素。 m[0, 0]得到一个完整的子数组(片),它本身就是array。你可以像这样得到这个子数组的第一个元素:m[0, 0][0],这就是为什么这两种语法都可以工作(尽管m[i, j, k]是首选,因为它没有不必要的中间步骤)。

在这个IPython中会议请看:

[email protected]:~$ 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 

它只能像这样numpy的array秒。 Python内置的元组和列表不能被元组索引,只能使用整数。

+0

嗯,什么m [0,0,0]产量? – 2009-11-30 22:11:06

+0

与'm [0,0] [0]'相同,因为'len(m.shape)== 3'。 – 2009-11-30 22:55:29

1

这是不可能的指数与另一元组的元组,所以没有代码是有效的。