我在python中的for循环遇到了一些麻烦。我的目标是遍历一组数据并对每个元素执行算术运算。这是一个例子
import numpy as np
X = np.array([[6.3, 7.4, 4.2], [2.6, 7.8, 9.1], [1.7, 3.9, 6.4]])
A = B = np.zeros((len(X), len(X)))
# Method One
for i in range(len(X)):
for j in range(len(X)):
A[i][j] = X[i][j] + 2 * 5
B[i][j] = X[i][j] + 8
# Method Two
A2 = X + 2 * 5
B2 = X + 8
print "A"
print A
print A2
print A == A2
print "B"
print B
print B2
print B == B2
方法一:
这里的想法是我会循环
通过每个元素
方法二:
这样就可以一次完成
我不仅仅使用方法二的原因是,对于某些值,我想执行不同的操作,所以我的想法是使用for循环并在执行操作之前检查每个值。我只是很困惑为什么这两种方法会产生不同的结果。
如果我切换9/10行,则结果
被翻转。
最佳答案
这行代码不会创建两个单独的数组A
和B
,而是创建一个数组,并创建两个名称A
和B
,引用该数组:
A = B = np.zeros((len(X), len(X)))
例如:
>>> A = B = np.zeros((3,3))
>>> A is B
True
>>> A[0,0] = 99
>>> A
array([[ 99., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> B
array([[ 99., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
因此,在这些行中:
A[i][j] = X[i][j] + 2 * 5
B[i][j] = X[i][j] + 8
你也可以写
A[i][j] = X[i][j] + 2 * 5
A[i][j] = X[i][j] + 8
这就是为什么顺序很重要的原因;它们都设置相同数组的相同单元格,因此最后一个是您看到的单元格。
关于python - 循环与批量运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21959887/