Rod*_*vas 4 python performance numpy while-loop optics-algorithm
当我打印我的arr值时,我得到了二维数组的正确值,但是当我退出 while 循环时,我的值都是错误的。
我不确定我做错了什么。
#num runs
n = 4
x = np.linspace(-1,1,n)
y = np.linspace(-1,1,n)
x1,y1 = np.meshgrid(x, y)
l = np.linspace(0,1000,n)
x = np.linspace(-1,1,n)
p1,p2 = np.meshgrid(l,l)
w020 = 5*(y1**2+x1**2)
row, cols = (n,n)
arr = [[0]*cols]*row
i = 0
p = 0
while i < n:
i += 1
p=0
while p < n:
arr[i-1][p] = 2+2*math.cos(2*math.pi*w020[i-1,p])
p += 1
print(arr)
Run Code Online (Sandbox Code Playgroud)
Dee*_*kar 10
创建二维数组的方式创建了一个浅列表
arr = [[0]*cols]*row
Run Code Online (Sandbox Code Playgroud)
相反,如果您想更新列表的元素,您应该使用
rows, cols = (5, 5)
arr = [[0 for i in range(cols)] for j in range(rows)]
Run Code Online (Sandbox Code Playgroud)
解释:
人们可以使用以下方法创建一个列表:
arr = [0]*N
Run Code Online (Sandbox Code Playgroud)
或者
arr = [0 for i in range(N)]
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,数组的所有索引都指向同一个整数对象
当您为特定索引分配值时,会创建一个新的 int 对象,例如arr[4] = 5创建
现在让我们看看当我们创建一个列表列表时会发生什么,在这种情况下,顶部列表的所有元素都将指向同一个列表
如果您更新任何索引的值,将创建一个新的 int 对象。但由于所有顶级列表索引都指向同一个列表,因此所有行看起来都相同。你会感觉更新一个元素就是更新该列中的所有元素。
致谢:感谢Pranav Devarakonda的简单解释
| 归档时间: |
|
| 查看次数: |
3075 次 |
| 最近记录: |