【问题标题】:TypeError: 'int' object is not subscriptable (python)TypeError:'int'对象不可下标(python)
【发布时间】:2015-07-31 05:52:54
【问题描述】:

我在 python3 中制作矩阵乘法算法时遇到问题。

这是代码:

def matrixMult(m1, m2):
    result = [[0 for x in range(len(m1))] for x in range(len(m2[0]))]
    # Iterate through rows of m1.
    for i in range(len(m1)):
        # Iterate through columns of m2.
        for j in range(len(m2[0])):
            # Iterate through rows of m2.
            for k in range(len(m2)):
                result[i][j] += m1[i][k] * m2[k][j]   # error occurs here.

    return result

尝试在两个随机矩阵上调用它,如下所示:

m = [3, 4, 2]
n = [[13, 9, 7, 15], [8, 7, 4, 6], [6, 4, 0, 3]]
r = matrixMult(m, n)

这会产生TypeError: 'int' object is not subscriptable 消息。

我为上面声明的两个矩阵添加了print(type()),它们属于'list' 类。对函数原型中使用的类 'list' 做了同样的事情。见鬼,一切都是'list' 类型。我不知道int object 是什么。

【问题讨论】:

    标签: python object matrix int multiplication


    【解决方案1】:

    您将m1 视为整数的嵌套列表:

    result[i][j] += m1[i][k] * m2[k][j]
    #               ^^^^^^^^
    

    不是;它只是一个简单的整数列表。 m1[i] then 是一个整数对象,你不能索引整数:

    >>> [3, 4, 2][0]
    3
    >>> [3, 4, 2][0][0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'int' object has no attribute '__getitem__'
    

    您可能想使用 i 作为索引:

    result[i][j] += m1[i] * m2[k][j]
    

    或者只传入二维数组(所以传入[[3], [4], [2]] 而不是[3, 4, 2])。

    【讨论】:

    • 好的,谢谢你的帮助。你会建议我如何处理一维矩阵?
    • @tudorv:嗯,你通常如何如何将一维数组与二维数组相乘?您可以传入一个每列只有一列的二维数组,或者您需要调整乘法代码以使用一维数组。
    【解决方案2】:

    你有以下索引操作

    m1[i][k]
    

    但是m1 被传入

    m = [3, 4, 2]
    

    它只有 1 个维度可供索引,而不是 2 个。

    【讨论】:

    • 好的,谢谢你的帮助。你会建议我如何处理一维矩阵?
    猜你喜欢
    • 2023-03-20
    • 2015-12-18
    • 2017-07-15
    • 2012-02-21
    • 2018-08-07
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多