我在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行,结果就会被翻转。
发布于 2014-02-22 12:15:08
这一行不生成两个单独的数组( 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
这就是为什么顺序很重要;它们都在设置同一个数组的相同单元格,所以最后一个就是你看到的那个。
发布于 2014-02-22 12:19:49
您需要创建两个数组:而不是
A = B = np.zeros((len(X), len(X)))
做
A = np.zeros((len(X), len(X)))
B = np.zeros((len(X), len(X)))
你正在创建两个指向同一个对象的变量--所以不管你做了什么,这就是你得到的.在Python中,表达式
A = B
意思是“从现在开始,当我说'A‘,我真的是指'B'”。当你来自,比方说,Matlab.
https://stackoverflow.com/questions/21959887
复制相似问题