Python 如何将numpy矩阵的内容复制到另一个矩阵?

Python 如何将numpy矩阵的内容复制到另一个矩阵?,python,numpy,matrix,Python,Numpy,Matrix,我有一个关于python和numpy模块基础知识的简单问题。我的职能如下: def update_x_last(self, x): self.x_last = x 类属性x_last和函数参数x都初始化为类型numpy.matrix,并且形状相同。(x.shape=x_last.shape=(4,1) 我注意到上面的代码没有将参数x的内容复制到x\u last,而是使对象x\u last指向x的地址 但是,我想做的是: def update_x_last(self, x): s

我有一个关于
python
numpy
模块基础知识的简单问题。我的职能如下:

def update_x_last(self, x):
    self.x_last = x
类属性x_last和函数参数x都初始化为类型
numpy.matrix
,并且形状相同。(
x.shape=x_last.shape=(4,1

我注意到上面的代码没有将参数
x
的内容复制到
x\u last
,而是使对象
x\u last
指向
x
的地址

但是,我想做的是:

def update_x_last(self, x):
    self.x_last = x
  • 不要更改self.x_last的地址
  • 仅将
    x
    的内容复制到
    self.x\u last
最好的方法是什么

编辑:
“不要更改”self.x_last“的地址这一要求对我来说并不重要。唯一需要的行为是第二个要求,即只复制内容。

如果形状相同,则其中任何一个都满足您的两个要求:

import numpy as np

self.x_last = np.copy(x)
self.x_last[...] = x
# or self.x_last[()] = x
# or self.x_last[:] = x
我认为第一个可能是最清楚的


让我们快速了解一下您的需求:

最后只将x的内容复制到self.x_

似乎是合理的。这意味着如果
x
继续改变,那么
x\u last
不会随之改变

不要更改self.x_last的地址


这不会给你带来任何好处。在我看来,这实际上更糟,因为在另一个线程中使用
x_last
的函数会看到它在它们下面意外地发生变化,更糟的是,当数据从
x

复制不完全时,可能会处理数据。如果形状相同,那么其中任何一个都可以满足这两个要求:

self.x_last[...] = x
# or self.x_last[()] = x
# or self.x_last[:] = x
我认为第一个可能是最清楚的


让我们快速了解一下您的需求:

最后只将x的内容复制到self.x_

似乎是合理的。这意味着如果
x
继续改变,那么
x\u last
不会随之改变

不要更改self.x_last的地址


这不会给你带来任何好处。在我看来,这实际上更糟糕,因为在另一个线程中使用
x\u last
的函数会看到它在它们下面发生意外的变化,更糟糕的是,当数据从
x

复制不完整时,它可能会处理数据。你为什么不想更改
self.x\u last的地址
?@MooingRawr:是的,我在特定条件下调用update函数。假设每2秒调用一次,0,2,4…但是时间每1秒经过一次,0,1,2…我只想每2秒更新一次x_,但我意识到它在奇数秒有更新值,即使没有调用该函数。P.S:参数x是存储在som中的另一个对象ewhere-else,不是我在每次函数调用时生成的矩阵。@OnurA:我不知道这是如何回答这个问题的。让我们换个说法:如果
id(x_last)不起作用,为什么会这样
每次都会更改?@Eric:你是对的,我的问题错了,这就是为什么我的答案也不相关。唯一重要的是,如果x继续更改,self.x_last不应该更改。正如你在下面提到的,你不想更改self.x_last的地址有什么原因吗?@mooningrawr:是的,我调用更新特定条件下的函数。假设每2秒,0,2,4…但时间每1秒流逝,0,1,2…我只想每2秒更新x_,但我意识到它在奇数秒有更新值,即使函数未调用。P.S:参数x是存储在其他地方的另一个对象,而不是我生成的矩阵我不明白这是怎么回答这个问题的。让我们换个说法:如果id
id(x_last)不起作用,为什么会这样
每次都改变?@Eric:你是对的,我的问题错了,这就是为什么我的答案也不相关。唯一重要的是,如果x继续改变,self.x_last就不应该改变。正如你在下面提到的,这并没有解决问题中提出的“不要改变self.x_last的地址”这并没有解决问题“不要更改self.x_last的地址”这个问题强调[…]和[:]之间的区别是什么?
..
的意思是“根据需要,尽可能多的
s以匹配数组维度”。只有当
x
是0维时,差异才真正重要:
x=np.array(1);x[:]
是一个错误,但
x=np.array(1);x[…]
不是。[…]和[:]之间的区别是什么?
.
的意思是“尽可能多的
s以匹配数组维度”。只有当
x
是0维时,区别才真正重要:
x=np。数组(1);x[:]
是一个错误,但
x=np.数组(1);x[…]
不是。