1

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

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

我想用一个通用的 2x2 矩阵替换零,然后用imshow(). 那可能吗?

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

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

但我收到了这个错误信息

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

4

2 回答 2

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 的data 参数的有效参数是:

  • NumPy 二维数组

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

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

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

于 2012-05-13T11:48:24.630 回答
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因为它需要一个包含可以解释为数字的元素的二维数组A[0,1],例如,您的 是一个大小为 2x2 的数组本身。它不能被解释为一个数字。

matplotlib.pyplot.imshow因此,如果您想将数组 A 显示为图像并弄清楚您希望如何将数据放入该结构中,那么您应该将数组 A 设计为一个 2D 浮点数组。

于 2012-05-13T11:39:09.267 回答