如何在python中创建嵌套矩阵

时间:2012-05-13 09:52:12

标签: python matrix numpy scipy

我想知道是否可以在python中创建嵌套矩阵。在这里,我定义了我的矩阵A

  A = array([[ 12.,   0.],[  0.,   4.]])

我想用通用的2x2矩阵替换零,然后使用imshow()绘制所有内容。这可能吗?

我尝试用这种方式定义嵌套矩阵

  A = array([[ 12.,   array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]])

但是我收到了此错误消息

ValueError:使用序列设置数组元素。

2 个答案:

答案 0 :(得分:2)

>>> M = NP.empty((5, 5), dtype=NP.object)     # a 2D NumPy array
>>> M
  array([[None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None]], dtype=object)

现在您可以插入序列,而无需获取 ValueError

>>> M[2,2] = NP.array([4, 3, 5])
>>> M
  array([[None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, [4 3 5], None, None],
         [None, None, None, None, None],
         [None, None, None, None, None]], dtype=object)

>>> M[2,2]
   array([4, 3, 5])

OP的另一部分 - 将这样的数组传递给Matplotlib的 imshow 是一个问题。

imshow 在视觉上将2D数组表示为根据x,y索引定位在画布上的点云。基于将颜色映射到数组值的颜色图,根据不同颜色和颜色强度指示该索引处的值。因此, imshow的数据参数的有效参数是:

  • NumPy 2D数组

更高维度的NumPy数组在两个(并且只有这两个AFAIK)中可以解释为

  • rgb元组的 的NumPy 2D数组(x,y,r,b,g)

  • NumPy 6D数组,被解释为 rgba的2D数组 元组 (x,y,r,g,b,a)

答案 1 :(得分:0)

numpy数组具有数据类型。在第一行中,您创建A,以便:

import numpy as np
A = np.array([[ 12.,   0.],[  0.,   4.]])
A.dtype

将打印dtype('float64')。这就是你想要放在这样一个数组中的所有东西必须能够被解释为浮点数。

在你第二次创作A时,这可能是个问题。如果您改为:

A = np.array([[ 12.,   np.array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]], dtype=np.object)

它会被创建,但请注意A的形状为2x2。您还应该意识到,对于所有维度,数组必须具有常规大小(数组中不能有任何孔)。也就是说,数组中的每个位置都被视为一个对象(其中一些恰好是数组本身)。

现在仍然不能用imshow显示,因为它期望一个2D数组包含可以解释为数字的元素,例如,A[0,1]是一个大小为2x2的数组本身。它不能被解释为数字。

所以你应该设计你的数组A,如果你想用matplotlib.pyplot.imshow将它显示为一个图像,那么它就是一个二维浮点数组,并弄清楚你希望如何将数据放入该结构中。