【问题标题】:Multiply each element of a list with each element of another list将列表的每个元素与另一个列表的每个元素相乘
【发布时间】:2023-03-19 11:00:01
【问题描述】:

我试图将两个列表相乘,取所有元素的总和并将总和添加到初始列表中。

我有两个列表:

list_1 = [(1, 5, 6, 90), (9.3, 3.4, 9, 8), (8.4, 9, 9, 10)]
list_2 = [[0.0, 0.1, 0.2, 0.7], [0.0, 0.1, 0.3, 0.6], [0.0, 0.1, 0.6, 0.3]]

我想将list_1 的每个元素与list_2 的所有条目相乘 结果应该是这样的:

result = [[0, 0.5, 1.2, 63], [0, 0.5, 1.8, 45], [0, 0.5, 3.6, 27]]

之后我会取结果的总和并将结果添加到 list_2

result_2 = [[0.0, 0.1, 0.2, 0.7, **64.7**], [0.0, 0.1, 0.3, 0.6, **47.3**], [0.0, 0.1, 0.6, 0.3, **31.1**]]

在第一步中,我想将最终数据存储在list_1 的每个元素的列表中

result_2_1= [[0.0, 0.1, 0.2, 0.7, **64.7**], [0.0, 0.1, 0.3, 0.6, **47.3**], [0.0, 0.1, 0.6, 0.3, **31.1**]]

result_2_2= 相同的过程,但使用List_1[1]

如果 list_1 只有一个列表 (= list_1 = [(1, 5, 6, 90)]),我当前的代码可以工作,但我尝试循环遍历列表似乎不起作用。我在条目中使用了 zip 或循环,但我总是最终将列表相乘......这是我目前有效的代码。

list_1 = [(1, 5, 6, 90)]
list_2 = [[0.0, 0.1, 0.2, 0.7], [0.0, 0.1, 0.3, 0.6], [0.0, 0.1, 0.6, 0.3]]
n_list_1 = np.array(list_1)
n_list_2 = np.array(list_2)
m_result = n_list_1 * n_list_2
n_result = []
for i in range(0,len(m_result)):
     n_result_1 = sum(m_result[i])
     n_result.append(n_result_1)
     list_2[i].append(list(n_result))

我希望你能得到我想要做的事情,并对如何解决问题有任何建议。

【问题讨论】:

    标签: python arrays multiplication


    【解决方案1】:
    import numpy as np
    
    list_1 = [(1, 5, 6, 90)]
    list_2 = [[0.0, 0.1, 0.2, 0.7], [0.0, 0.1, 0.3, 0.6], [0.0, 0.1, 0.6, 0.3]]
    n_list_1 = np.array(list_1)
    n_list_2 = np.array(list_2)
    m_result = n_list_1 * n_list_2
    n_result = []
    for i in range(0,len(m_result)):
         n_result_1 = sum(m_result[i])
         n_result.append(n_result_1)
         list_2[i].append(n_result[i])
    print(list_2)
    

    只需将 list_2[i].append(list(n_result)) 更改为 list_2[i].append(n_result[i]) 注意第二个子列表的总和应该是 56.3

    输出

    [[0.0, 0.1, 0.2, 0.7, 64.69999999999999], [0.0, 0.1, 0.3, 0.6, 56.3], [0.0, 0.1, 0.6, 0.3, 31.1]] 
    

    【讨论】:

    • 当您将元素添加到 list_1 时,这不起作用。因为那样乘法就会失败,因为 numpy * 需要合适的形状。
    【解决方案2】:

    如果你想使用 zip,你可以试试这个代码:

    list_1 = [(1, 5, 6, 90), (9.3, 3.4, 9, 8), (8.4, 9, 9, 10)] 
    list_2 = [[0.0, 0.1, 0.2, 0.7], [0.0, 0.1, 0.3, 0.6], [0.0, 0.1, 0.6, 0.3]]
    
    for inner_list1, inner_list2 in zip(list_1, list_2):
        result = sum(a*b for a, b in zip(inner_list1, inner_list2))
        inner_list2.append(result)
    
    print(list_2)
    

    输出:

    [[0.0, 0.1, 0.2, 0.7, 64.69999999999999], [0.0, 0.1, 0.3, 0.6, 7.84], [0.0, 0.1, 0.6, 0.3, 9.3]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多