嵌套for循环及其格式

时间:2016-08-04 16:29:47

标签: arrays python-2.7 loops for-loop

我正在使用Python 2.7。从以前的帖子,我正在学习Python,我已经从数组转移,现在我正在进行循环。我也在尝试使用数组进行操作。

 A1 = np.random.random_integers(35, size=(10.,5.))

 A = np.array(A1)

 B1 = np.random.random_integers(68, size=(10.,5.))

 B = np.array(B1)

 D = np.zeros(10,5) #array has 10 rows and 5 columns filled with zeros to give me the array size I want
 for j in range (1,5):
     for k in range (1,5):
          D[j,k] = 0
          for el in range (1,10):
               D[j,k] = D[j,k] + A[j] * B[k] 

我得到的错误是:设置一个带序列的数组元素

我的格式不正确吗?

1 个答案:

答案 0 :(得分:0)

因为A,B和D都是2D数组,所以D [j,k] 是一个单独的元素,而A [j](与A [j,:]相同)是一维数组,在这种情况下,它有5个元素。类似于B [k] = B [k,:],即也是5元素阵列。 因此,[j] * B [k]也是五元素数组,不能存储在单个元素的位置,因此得到错误:设置一个带序列的数组元素。

如果要从A和B中选择单个元素,则最后一行应为

    D[j,k] = D[j,k] + A[j,k] * B[j,k] 

对您的代码的进一步评论:

    # A is already a numpy array, so 'A = np.array(A1)' is redundant and can be omitted
    A = np.random.random_integers(35, size=(10.,5.))

    # Same as above                
    B = np.random.random_integers(68, size=(10.,5.))

    D = np.zeros([10,5]) # This is the correct syntax for creating a 2D array with the np.zeros() function
    for j in range(1,5):  
        for k in range(1,5):
             # D[j,k] = 0   You have already defined D to be zero for all elements with the np.zeros function, so there is no need to do it again
             for el in range(1,75):
                  D[j,k] = D[j,k] + A[j] * B[k]  

编辑: 好吧,我没有足够的声誉评论你的帖子@ Caroline.py,所以我会在这里做:

首先,请记住python使用零索引,因此'范围(1,5)'给你' [1,2,3,4]',这意味着你不会到达第一个索引,即索引0.因此你可能想要使用'范围(0, 5)',它与'范围(5)'相同。

我可以看到你将el范围从75改为10.如果你没有将el用于任何东西,那只是意味着你添加10次执行最后一行。

我不知道你想做什么,但是如果你想把A和B的倍数存储在D中,那么这应该是正确的:

    for j in range(10):  
        for k in range(5):
              D[j,k] = A[j,k] * B[j,k]  

或只是

    D = A * B