【问题标题】:My conditional variable on my if statement is being changed by the statement, even though it doesn't appear in the statement. Why? [duplicate]我的 if 语句中的条件变量正在被语句更改,即使它没有出现在语句中。为什么? [复制]
【发布时间】:2019-12-29 02:32:06
【问题描述】:

我想创建两个矩阵。然后根据第一个矩阵中的数字改变第二个矩阵的数字。所以我生成了一个关于我的第一个矩阵的 If 语句,如果为真,这将导致我的第二个矩阵发生变化。但是,它会引起两个矩阵的变化吗?

我的代码与单个数字对象完美配合。仅当我尝试将其与矩阵一起应用时才会发生。

import numpy as np
n = 3
matr = np.zeros((n,n))
matr[0][0] = 1
matr2 = matr

print(matr)
[[1. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

print(matr2)
[[1. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

if matr[0][0] == 1:
    matr2[0][0] = 9

print(matr)
[[9. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

print(matr2)
[[9. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

因为“matr”在我的 if 语句中没有作为主语出现,所以不应该改变它吗?

x = 1
y = x

if x == 1:
    y = 9

print(x)
1
print(y)
9

【问题讨论】:

  • 这 2 个变量只是对相同数据的 2 个引用,而不是 2 个不同的矩阵
  • 你应该看看 NumPy 中的视图和副本。

标签: python numpy atom-editor


【解决方案1】:

这两个变量只是对同一个矩阵的两个引用,而不是两个不同的矩阵; matr2 = matr 只是创建了对同一矩阵的新引用。

语句matr2[0][0] = 9 修改了您的示例中存在的唯一一个矩阵,它与使用matr[0][0] = 9 完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2021-01-28
    相关资源
    最近更新 更多