如何在python中创建嵌套矩阵

如何在python中创建嵌套矩阵,python,matrix,numpy,scipy,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:使用序列设置数组元素。numpy数组具有数据类型

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

  A = array([[ 12.,   0.],[  0.,   4.]])
我想用一个普通的2x2矩阵替换零,然后用
imshow()
绘制所有内容。可能吗

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

  A = array([[ 12.,   array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]])
但我收到了这个错误信息


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

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

import numpy as np
A = np.array([[ 12.,   0.],[  0.,   4.]])
A.dtype
将打印
dtype('float64')
。这就是您想要放入这样一个数组中的所有内容都必须能够被解释为浮点数

在你的第二次创作中,这可能就是问题所在。如果您改为:

A = np.array([[ 12.,   np.array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]], dtype=np.object)
它将被创建,但是请注意,
A
的形状为2x2。您还应该认识到,数组的所有维度都必须具有规则的大小(数组中不能有任何孔)。也就是说,数组中的每个位置都被视为单个对象(其中一些恰好是数组本身)

现在使用
imshow
显示仍然不起作用,因为它需要一个2D数组,其中的元素可以解释为数字,而您的
a[0,1]
就是一个大小为2x2的数组本身。它不能被解释为一个数字

因此,如果要使用
matplotlib.pyplot.imshow
将数组A显示为图像,则应将其设计为二维浮点数组,并确定如何将数据放入该结构中

>>> 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

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

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

  • NumPy二维阵列
imshow可以解释为两个(并且只有这两个AFAIK)中的高维NumPy数组

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

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


你的意思是这样的:
[[12,1,1],[1,1]],[0,4]
这是一个与
numpy
scipy
有关的问题吗?如果是这样,请将其标记为这样。您能写出一个示例输出吗?@Vikas是的,但我不能用
imshow()
显示您的矩阵,我仍然得到相同的错误message@Matteo,我对
imshow()
numpy
一无所知,但我想它失败了,因为输入根本不是矩阵<代码>[[12,0.],[0,4.]似乎是一个
2x2
矩阵。然后用另一个
2x2
矩阵替换
(0,1)
元素。我不知道如何将结果结构解释为矩阵。
>>> 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])