ghommyl 2022-06-01 21:34 采纳率: 100%
浏览 12
已结题

list[:]不起作用

我想要编写一个像np.dot()一样的函数

代码:
dot.py

import numpy as np

def dot(a1=[], a2=[]):
    list = np.zeros([len(a1), len(a2[0])])

    array_a = a1
    array_b = a2[:]

    l_times = 0
    n_times = 0

    for l in list:
        for n in l:
            list[l_times][n_times] = \
                array_a[0][0]*array_b[0][0]+array_a[0][1]*array_b[1][0]
            del array_b[0][0]
            del array_b[1][0]
            n_times += 1

        array_b = a2[:]
        del array_a[0]
        l_times += 1

    list = list.tolist()
    return list

print(dot([[1, 2], [3, 4]], [[1, 3], [2, 4]]))

代码报错了

报错内容:

Traceback (most recent call last):
  File "dot.py", line 30, in <module>
    print(dot([[1, 2], [3, 4]], [[1, 3], [2, 4]]))
  File "dot.py", line 18, in dot
    array_a[0][0]*array_b[0][0]+array_a[0][1]*array_b[1][0]
IndexError: list index out of range

我发现列表array_b做修改时列表a2也做了修改,但是不会解决这个问题。

后来,我又发现函数只能用于第一个矩阵有两列,第二个矩阵有两行的两个矩阵。

修改后的代码:

import numpy as np

def dot(a1=[], a2=[]):
    #获取第二个矩阵的行数(第一个矩阵的列数也行)
    lines = len(a2)

    #创建一个值全部为0的列表
    list = np.zeros([len(a1), len(a2[0])])

    array_a = a1
    array_b = a2[:]

    #循环的次数
    l_times = 0
    n_times = 0

    #循环
    for l in list:
        for n in l:
            for line in range(lines):
                list[l_times][n_times] += array_a[0][line]*array_b[line][0]
            #删除第二个矩阵中的第一列
            del array_b[0][0]
            del array_b[1][0]
            n_times += 1

        array_b = a2[:]
        #把第一个矩阵的第一行删掉
        del array_a[0]
        l_times += 1

    return list

print(dot([[1, 2], [3, 4]], [[1, 3], [2, 4]]))


又报出了另一个错误:

Traceback (most recent call last):
  File "C:/Users/Ying/Desktop/Python/算法/dot.py", line 34, in <module>
    print(dot([[1, 2], [3, 4]], [[1, 3], [2, 4]]))
  File "C:/Users/Ying/Desktop/Python/算法/dot.py", line 21, in dot
    list[l_times][n_times] += array_a[0][line]*array_b[line][0]
IndexError: index 2 is out of bounds for axis 0 with size 2

这个错误可以不解答。

求解。

  • 写回答

1条回答 默认 最新

  • 不会长胖的斜杠 后端领域新星创作者 2022-06-01 21:52
    关注

    b空了

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月13日
  • 已采纳回答 6月5日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 我的数据无法存进链表里
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端