2013-10-05 54 views
0

我目前定义两个矩阵与Python有没有更简单的方法来定义多个归零矩阵?

A, B = matrix(zeros(shape =(3,3), dtype=complex)), matrix(zeros(shape =(3,3), dtype=complex)) 

我想用类似

A, B = 2*(matrix(zeros(shape =(3,3), dtype=complex)),) 

然而,在第二种情况下,以一个所做的任何更改现在变为乙太。

我希望能够在单行上创建多个这种类型的矩阵,而不使用第一种方法,因为它太长了,有没有办法做到这一点?

回答

0

如何:

A, B = [matrix(zeros(shape=(3,3), dtype=complex)) for _ in range(2)] 

你的第一次尝试没有成功的原因是,你分配在同一个阵列A和B.为什么呢?那么,(matrix(zeros(shape =(3,3), dtype=complex)),)是一个矩阵的元组。加倍会为您提供两次相同矩阵的元组。然后你把它解压缩成两个变量,最后引用相同的矩阵。

这里没有什么特别的numpy数组;它发生在普通的旧Python列表中,甚至是整数(尽管在这种情况下,你并不在意) - 与数组和列表不同,整数是不可变的,所以有两个引用相同的数字5就好像有两个单独的数字5会是)。

这让很多新手感到困惑,有一个FAQ question来解释它。

无论如何,使用理解允许您重复评估相同的表达式。当然,您通常使用循环变量,每次使用不同的值对其进行评估,但这不是必需的。在这种情况下,我们希望两个矩阵的构造方式相同,所以我只是将循环变量扔到_并忽略它。

相关问题