我想知道是否有可能在python中创建一个嵌套矩阵。这里我定义了我的矩阵A
A = array([[ 12., 0.],[ 0., 4.]])我想用一个通用的2x2矩阵替换零,然后用imshow()绘制所有内容。这有可能吗?
我试着这样定义我的嵌套矩阵
A = array([[ 12., array([[ 1., 1.],[ 1., 1.]])],[ 0., 4.]])但是我收到了这个错误信息
ValueError:使用序列设置数组元素。
发布于 2012-05-13 19:48:25
>>> 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])操作的另一部分--将这样的数组传递给Matplotlib的imshow是一个问题。
imshow直观地将2D数组表示为根据x,y索引定位在画布上的点的云。基于将颜色映射到数组值的颜色映射图,根据不同的颜色和颜色强度来指示该索引处的值。因此,imshow的data参数的有效参数为:
两个(并且只有这两个AFAIK)的高维NumPy数组,imshow可以解释为
发布于 2012-05-13 19:39:09
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数组。
https://stackoverflow.com/questions/10570818
复制相似问题