0

我目前正在定义两个矩阵

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

但是,在第二种情况下,对 A 所做的任何更改现在也会更改 B。

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

4

1 回答 1

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 列表,甚至 int 上(尽管在这种情况下你不在乎——与数组和列表不同,int 是不可变的,所以有两个对同一个数字5的引用就像有两个单独5的 number 一样好)是)。

这让足够多的新手感到困惑,以至于有一个常见问题解答问题可以解释它。

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

于 2013-10-05T00:40:38.793 回答