繁体   English   中英

Python3,Numpy - 矩阵元素矩阵

[英]Python3 , Numpy — Matrix of Matrix elements

我想创建一个包含矩阵元素的矩阵。 所以我做了明显的事情,并做了这个:

import numpy as np

A = np.array([1,2,3,1],[3,1,5,1])
B = np.array([1,6,8,9],[9,2,7,1])
E = np.array([A, B],[B, A])

但编译器返回: TypeError:数据类型未被理解

我能做些什么来创建这样一个矩阵,因为我有非常庞大的矩阵,而且我没有时间明确地写下每个人?


*编辑1:*

发生的其他问题:

在此输入图像描述

我没有获得14x14矩阵,而是获得了一个多维(2,2,7,7)矩阵。 在我的原始问题的简化版本中,一切都是合理的。 任何想法为什么现在发生?

在这种情况下,我有Amat 7x7,Bmat 7x7,Emat 14x14,Smat 14x14


编辑2

好的,我使用np.block()解决了问题,如下面的评论中所述。 非常感谢你。


假设你想要一个二维的形状数组(4, 8) ,听起来好像你正在寻找numpy.block 它可以从NumPy 1.13开始使用,顾名思义,它创建了一个新的数组,其中每个块都是一个现有的数组。

在创建AB的调用中还需要一对额外的方括号。 numpy.array的签名是:

array(object,dtype = None,copy = True,order ='K',subok = False,ndmin = 0)

所以如果你写np.array([1, 2, 3, 1], [3, 1, 5, 1])那么你将两个参数传递给array函数,第二个参数将被解释为dtype :即,数组元素的所需数据类型。 这就是为什么你得到“数据类型不理解”的错误。 相反,您希望将嵌套的列表列表作为第一个参数np.array([[1, 2, 3, 1], [3, 1, 5, 1]])np.array([[1, 2, 3, 1], [3, 1, 5, 1]])

把它们放在一起:

>>> import numpy as np
>>> A = np.array([[1, 2, 3, 1], [3, 1, 5, 1]])
>>> B = np.array([[1, 6, 8, 9], [9, 2, 7, 1]])
>>> E = np.block([[A, B], [B, A]])
>>> A
array([[1, 2, 3, 1],
       [3, 1, 5, 1]])
>>> B
array([[1, 6, 8, 9],
       [9, 2, 7, 1]])
>>> E
array([[1, 2, 3, 1, 1, 6, 8, 9],
       [3, 1, 5, 1, 9, 2, 7, 1],
       [1, 6, 8, 9, 1, 2, 3, 1],
       [9, 2, 7, 1, 3, 1, 5, 1]])

欢迎来到Stack Overflow!

np.array希望第一个参数是矩阵,第二个参数是数据类型。

在这里,您实际上是将两个列表作为前两个参数发送。 由于数字列表不是数据类型,因此它无法理解您要执行的操作。 您需要将其括在一个列表中:

import numpy as np

A = np.array([[1,2,3,1],[3,1,5,1]])
B = np.array([[1,6,8,9],[9,2,7,1]])
E = np.array([[A, B],[B, A]])

要发送数据类型,您可以执行例如

D = np.array([1,2,3,4,5], np.float32) 现在第二个参数是实际的数据类型,而不是列表。

你很近,只是错过了几个括号。 对于矩阵,您需要为np.array一个列表列表。

In [4]: import numpy as np
   ...: 
   ...: A = np.array([[1,2,3,1],[3,1,5,1]])
   ...: B = np.array([[1,6,8,9],[9,2,7,1]])
   ...: E = np.array([[A, B],[B, A]], dtype=int)
   ...: 

In [5]: E
Out[5]: 
array([[[[1, 2, 3, 1],
     [3, 1, 5, 1]],

    [[1, 6, 8, 9],
     [9, 2, 7, 1]]],


   [[[1, 6, 8, 9],
     [9, 2, 7, 1]],

    [[1, 2, 3, 1],
     [3, 1, 5, 1]]]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM