在下面的示例中,就好像Python不区分angle[u][v]
和radius[u][v]
。
也就是说,从for循环中的第一个命令开始,评估angle
数组的元素。然后,从for循环中的第二个命令,评估radius
数组的相应元素。我的问题是,radius[v][u]
的此值会被覆盖到angle[v][u]
。
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
import matplotlib as mpl
import math
X = np.arange(0, 656, 1)
Y = np.arange(0, 667, 1)
X, Y = np.meshgrid(X, Y)
X = X - 243 + 0.0
Y = Y - 363 + 0.0
angle = X
radius = X
height = X.shape[0]
width = X.shape[1]
print width
print height
for v in xrange(height):
for u in xrange(width):
angle[v][u] = math.atan2(X[v][u],Y[v][u])
radius[v][u] = math.sqrt(X[v][u]**2 + Y[v][u]**2)
print angle
print radius
我在这里缺少什么?
答案 0 :(得分:0)
angle = X
radius = X
angle
和radius
是对同一对象X
的引用。
当你改变一个时,你正在改变X
,反之亦然。
使用X
和Y
:
>>> X = np.arange(0,2)
>>> Y = X
>>> X, Y
(array([0, 1]), array([0, 1]))
>>> X[0] = 5
>>> X, Y
(array([5, 1]), array([5, 1]))
如果您不想要此行为,则应copy
X.
>>> from copy import copy
>>> X = np.arange(0,2)
>>> Y = copy(X)
>>> X, Y
(array([0, 1]), array([0, 1]))
>>> X[0] = 5
>>> X, Y
(array([5, 1]), array([0, 1]))