关于Python中numpy矩阵的简单问题

0 投票
2 回答
549 浏览
提问于 2025-04-15 16:32

假设我有一个叫做MATRIX的numpy矩阵,它有三个坐标: (x, y, z)。

通过以下代码访问矩阵的值

myVar = MATRIX[0,0,0]

是否等于

myVar = MATRIX[0,0][0]

或者

myVar = MATRIX[0][0,0]

?

如果我有以下代码呢?

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

最后一行是否等同于这样做

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

我做了一些简单的测试,似乎是这样,但可能在所有情况下并不一定如此。方括号在python中与numpy矩阵是怎么工作的?从一开始我就对它们的工作方式感到困惑。

谢谢

2 个回答

1

用一个元组去索引另一个元组是不行的,所以那段代码都是不合法的。

6

我猜你手里的是一个 array(数组),而不是 matrix(矩阵),因为矩阵只能有两个维度。

m[0, 0, 0] 是用来获取位置 (0, 0, 0) 的元素。m[0, 0] 则是获取一个完整的子数组(切片),这个子数组本身也是一个 array。你可以这样获取这个子数组的第一个元素:m[0, 0][0],所以这两种写法都能用(不过 m[i, j, k] 更好,因为它省去了不必要的中间步骤)。

看看这个 ipython 会话:

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

这种方式只适用于 numpy 的 array。Python 自带的元组和列表不能用元组来索引,只能用整数。

撰写回答