dbr*_*ane 1 python arrays numpy list matrix
我正在尝试使用numpy矩阵列表,并遇到一个恼人的问题.
假设我从十个2x2零矩阵的列表开始
para=[numpy.matrix(numpy.zeros((2,2)))]*(10)
Run Code Online (Sandbox Code Playgroud)
我访问这样的单个矩阵
para[0]
para[1]
Run Code Online (Sandbox Code Playgroud)
等等.到现在为止还挺好.
现在,我想仅修改第二个矩阵的第一行,保持所有其他矩阵不变.所以我这样做
para[1][0]=numpy.matrix([[1,1]])
Run Code Online (Sandbox Code Playgroud)
第一个索引指向列表中的第二个矩阵,第二个索引指向该矩阵中的第一行,将其替换为[1,1].
但奇怪的是,这个命令将列表中所有十个矩阵的第一行改为[1,1]而不是像我想要的那样只改变第二行.是什么赋予了?
当您将初始列表乘以10时,最终会得到10个numpy数组的列表,这些数组实际上是对相同底层结构的引用.修改一个会修改所有这些,因为实际上只有一个numpy数组,而不是10个.
如果您需要证明,请在REPL中查看此示例:
>>> a = numpy.zeros(10)
>>> a = [numpy.zeros(10)]*10
>>> a[0] is a[1]
True
>>>
Run Code Online (Sandbox Code Playgroud)
的is操作者检查是否两个对象实际上相同(未如果他们在值相等).
你应该做的是使用列表推导来生成初始数组而不是乘法,如下所示:
para=[numpy.matrix(numpy.zeros((2,2))) for i in range(10)]
Run Code Online (Sandbox Code Playgroud)
这将调用numpy.matrix()十次而不是一次,并生成10个不同的矩阵.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |