我目前正在使用
定义两个矩阵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.
我希望能够在不使用第一种方法的情况下在一行上制作这种类型的多个矩阵,因为它太长了,有没有办法做到这一点?
答案 0 :(得分: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是不可变的,因此对同一个数字5
有两个引用就像拥有它一样好两个单独的数字5
将是。)
这让新手感到困惑,因为有FAQ question来解释它。
无论如何,使用理解允许您重复评估相同的表达式。当然,通常你使用循环变量,每次都用不同的值来评估它,但这不是必需的。在这种情况下,我们希望两个矩阵以相同的方式构造,因此我只是将循环变量抛入_
并忽略它。