如何使用Python将一个数组中的元素与另一个数组中的每个元素相乘

如何使用Python将一个数组中的元素与另一个数组中的每个元素相乘,python,arrays,python-3.x,nested,multiplication,Python,Arrays,Python 3.x,Nested,Multiplication,我的项目需要帮助。我有两个数组,其中我必须为array2中的每个元素乘以array1 例如, pop_i = [[1, 0, 1] [0, 0, 1] [1, 1, 0]] r_q = [[3, 5, 2], [5, 4, 3], [5, 2, 2]] 我首先做的是安排r_q成为我想要的数组 # simply arranging the values by means of transposition or using zip r_q = [[3, 5,

我的项目需要帮助。我有两个数组,其中我必须为
array2
中的每个元素乘以
array1

例如,

pop_i = [[1, 0, 1]
         [0, 0, 1]
         [1, 1, 0]]

r_q = [[3, 5, 2], [5, 4, 3], [5, 2, 2]] 
我首先做的是安排r_q成为我想要的数组

# simply arranging the values by means of transposition or using zip
r_q = [[3, 5, 5], [5, 4, 2], [2, 3, 2]]
我现在需要做的是将r_q中的元素与pop_I中的每个元素相乘,如:

r_10 = [3, 5, 5] * [1, 0, 1]
r_11 = [3, 5, 5] * [0, 0, 1]
r_12 = [3, 5, 5] * [1, 1, 0]

r_20 = [5, 4, 2] * [1, 0, 1]
r_21 = [5, 4, 2] * [0, 0, 1]
r_22 = [5, 4, 2] * [1, 1, 0]

r_30 = [2, 3, 2] * [1, 0, 1]
r_31 = [2, 3, 2] * [0, 0, 1]
r_32 = [2, 3, 2] * [1, 1, 0]
然后,得到他们的总数

# r_1_sum = [3*1 + 5*0 + 5*1, 3*0 + 5*0 + 5*1, 3*1 + 5*1 + 5*0] and so on...

r_1_sum = [8, 5, 8]
r_2_sum = [7, 2, 9]
r_3_sum = [4, 2, 5]
我很难将r_q与pop_I中的每个元素相乘。到目前为止,我的代码如下所示:

def fitness_score(g, u):
   # arrange resource demand of r_q 
   result = numpy.array([lst for lst in zip(*r_q)])

   # multiply elements in r_q with each elements in pop_i
   for i in range(0, len(result)):
      multiplied_output = numpy.multiply(result[i], pop_i)
   print(multiplied_output)

   for x in in range(0, len(multiplied_output)):
      final = numpy.sum(multiplied_output[x])

但我一直在为r_q中的最后一个索引获取答案。我认为乘法部分错了。如有任何帮助/建议,将不胜感激。非常感谢你

链接中的示例代码供参考:

# Program to multiply two matrices using nested loops
# 3x3 matrix
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
# 3x4 matrix
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# result is 3x4
result = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]

# iterate through rows of X
for i in range(len(X)):
   # iterate through columns of Y
   for j in range(len(Y[0])):
       # iterate through rows of Y
       for k in range(len(Y)):
           result[i][j] += X[i][k] * Y[k][j]

for r in result:
   print(r)

检查此链接是否有助于您:。(它没有直接的答案,但使用与您尝试的相同的逻辑。)

您可以通过使用numpy
dot
函数获得所需的结果

import numpy as np

pop_i = np.array([[1, 0, 1],[0, 0, 1],[1, 1, 0]])

r_q = np.array([[3, 5, 2], [5, 4, 3], [5, 2, 2]])

result = np.dot(np.transpose(r_q), pop_i)
参考文档。

假设

pop_i = [[1, 0, 1],[0, 0, 1],[1, 1, 0]]
r_q = [[3, 5, 2], [5, 4, 3], [5, 2, 2]] 
使用:

或者,最好使用
numpy
方法

import numpy as np

a1 = np.array(pop_i)
a2 = np.array(r_q)
a = a1 @ a2
r_1_sum, r_2_sum, r_3_sum = a.T.tolist()
结果:

[8, 5, 8] # r_1_sum
[7, 2, 9] # r_2_sum
[4, 2, 5] # r_3_sum

你知道r_q:中的i的
类似于每个循环的a吗
r_q[i]
不是元素,
i
本身就是元素(在本例中是列表)。你能粘贴错误吗?@Austin Indexer:索引10超出了大小为3的轴0的界限。对Python来说仍然非常陌生。任何帮助都将不胜感激。你能使用numpy吗?@ShubhamSharma在哪一部分?r_q与pop_i的乘积?我还在想办法。我发现简单地将它们相乘很容易,但我要做的是将r_q中的元素与pop_I中的每个元素相乘,然后得到它们的和并存储它们。我对Python还是新手,因此任何帮助都将不胜感激,请仔细考虑。是的,您可以使用numpy将
r\u q
pop\u I
相乘。请尝试仔细考虑您发送的链接!非常感谢。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-你好我已经试过这样做了,但是我没有得到我期望的结果。还是谢谢你的回答!非常感谢你!成功了!如果您不介意的话,我只是想问一个后续问题,是否可以将r_3_sum循环成r_sum{}=a.t.tolist()?这是因为r_和高度依赖于活动的数量。假设我只有2个活动,因此只能有2个r_和。[r_sum_1和r_sum_2]我不确定我是否理解你的后续问题?你能解释更多吗?如果我用r_sum=a.T.tolist()来代替r_1_sum等等,那就好了。这样,答案就只存储在一个列表中,对吗?@Acee-Yep,那太好了。非常感谢!这部分代码我已经用了两天了!你的回答真的帮了我很大的忙!非常感谢!
[8, 5, 8] # r_1_sum
[7, 2, 9] # r_2_sum
[4, 2, 5] # r_3_sum