我想创建一个包含矩阵元素的矩阵。所以我做了明显的事情,并做了这个:
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开始使用,顾名思义,它创建了一个新的数组,其中每个块都是一个现有的数组。
在创建A
和B
的调用中,您还需要一对额外的方括号。 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]])
。
把它们放在一起:
>>> 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]])
要发送数据类型,您可以执行以下操作:
qazxsw poi。现在第二个参数是实际数据类型,而不是列表。
你很近,只是错过了几个括号。对于矩阵,您需要为D = np.array([1,2,3,4,5], np.float32)
提供列表列表。
np.array