我在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行,则结果
被翻转。

最佳答案

这行代码不会创建两个单独的数组AB,而是创建一个数组,并创建两个名称AB,引用该数组:

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/

10-11 23:15
查看更多