Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用以下方法创建numpy矩阵时有什么区别吗?_Python_Numpy - Fatal编程技术网

Python 用以下方法创建numpy矩阵时有什么区别吗?

Python 用以下方法创建numpy矩阵时有什么区别吗?,python,numpy,Python,Numpy,当我最近练习numpy矩阵时,我用以下方式创建了一个矩阵: theta = np.mat([1,1]) temp = np.mat(theta) 然后我执行以下代码,例如 temp[0,0] = theta[0,0] - 0.3 print(temp, theta) 但答案是如此出乎意料: [[0 1]] [[0 1]] 但当我尝试另一种方法时: theta = np.mat([1,1]) temp = np.mat(np.ones(a.shape)) 答案是完全正确的 后来我发现,事实

当我最近练习numpy矩阵时,我用以下方式创建了一个矩阵:

theta = np.mat([1,1])
temp = np.mat(theta)
然后我执行以下代码,例如

temp[0,0] = theta[0,0] - 0.3
print(temp, theta)
但答案是如此出乎意料:

[[0 1]] [[0 1]]
但当我尝试另一种方法时:

theta = np.mat([1,1])
temp = np.mat(np.ones(a.shape))
答案是完全正确的

后来我发现,事实上,在第一种方法中,temp是θ的一个视图,当改变temp的值时,θ也会改变,但是有人能解释我得到的结果吗? 为什么执行以下代码将获得
[[0 1][[0 1]]]

theta = np.mat([1,1])
temp = np.mat(theta)
temp[0,0] = theta[0,0] - 0.3
print(temp, theta)

非常感谢

我首先要提到的是,建议停止使用该类,它可能会在未来版本的numpy中被删除

产生差异的原因是默认值的初始化方式。对于初始化它的方式,
theta=np.mat([1,1])
,它默认为整数类型,因此它不会以您期望的方式处理浮点的减法运算,而是截断您的结果

查看文档时,它指定了以下内容:

数据类型:数据类型,可选

阵列所需的数据类型,例如numpy.int8默认值为numpy.float64。


因此,在执行
temp=np.mat(np.ones(a.shape))
时,您将获得一个默认值集floats。该值集与您尝试执行的浮点减法运算类型一起工作。

从数字的数据类型中,numpy得出结论,矩阵的数据类型应该是整数类型。明确指定dtype或将一个数字更改为1.0停止查看np.mat。它已经过时了。前几天有人遇到了同样的问题,非常感谢,它真的很有帮助