我正在使用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]
我得到的错误是:设置一个带序列的数组元素
我的格式不正确吗?
答案 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