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日

悬赏问题

  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?