Python3,Numpy - 矩阵元素矩阵

问题描述 投票:2回答:3

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

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

发生的其他问题:

enter image description here

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

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


编辑2

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


python arrays python-3.x numpy
3个回答
4
投票

假设你想要一个形状为(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]])

把它们放在一起:

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

3
投票

欢迎来到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。现在第二个参数是实际数据类型,而不是列表。


1
投票

你很近,只是错过了几个括号。对于矩阵,您需要为D = np.array([1,2,3,4,5], np.float32)提供列表列表。

np.array
© www.soinside.com 2019 - 2024. All rights reserved.