【问题标题】:TypeError: unsupported operand type(s) for %: 'list' and 'int' with np.mod类型错误:不支持的操作数类型 %: 'list' 和 'int' with np.mod
【发布时间】:2021-03-08 07:02:04
【问题描述】:

我有这个错误:

文件“C:\Users\dimak\PycharmProjects\HelloWorld\kl.py”,第 13 行,在 encryptAffine 中 linearNumericEncryptedWordArray = np.mod(keyMatrix.dot(X), 33) TypeError: unsupported operand type(s) for %: 'list' and 'int' 我真的不知道如何解决这个问题。

import numpy as np
def encryptAffine(keyMatrix, keyVector, inputWord, alphabet, alphabetReversed):
    encodeWordToNumberic = []
    for char in inputWord:
        encodeWordToNumberic.append(alphabet[char])

        numericWordArray = []
        numericWordArray.append(encodeWordToNumberic[::2])
        numericWordArray.append(encodeWordToNumberic[1::2])
        X = np.array(numericWordArray, dtype="object")

        linearNumericEncryptedWordArray = np.mod(keyMatrix.dot(X), 33)

        affineNumericEncryptedWordArray = np.mod(np.add(linearNumericEncryptedWordArray, keyVector), 33)
        print(affineNumericEncryptedWordArray.T)
        encryptedWord = ''
        for i in affineNumericEncryptedWordArray.T:
            for j in i:
                encryptedWord += alphabetReversed[j]

    return encryptedWord

以及带有字母表的主要功能:

def main():
    alphabet = {'а': 0, 'б': 1, 'в': 2, 'г': 3, 'ґ': 4, 'д': 5, 'е': 6, 'є': 7, 'ж': 8, 'з': 9, 'и': 10, 'і': 11,
                'ї': 12, 'й': 13, 'к': 14, 'л': 15, 'м': 16, 'н': 17, 'о': 18, 'п': 19, 'р': 20, 'с': 21, 'т': 22,
                'у': 23, 'ф': 24, 'х': 25, 'ц': 26, 'ч': 27, 'ш': 28, 'щ': 29, 'ь': 30, 'ю': 31, 'я': 32}

    alphabetReversed = dict((v, k) for k, v in alphabet.items())

    A = np.array([[16, 16], [27, 31]])
    S = np.array([[2], [4]])
    word = 'перетворення'

    outputWord = encryptAffine(A, S, word, alphabet, alphabetReversed)

    print("Вхідне слово: {}\nЗашифроване слово: {}".format(word, outputWord))
if __name__ == "__main__":
    main()

【问题讨论】:

  • 您在第一个代码块中的缩进有点偏离,您能否修复一下以便我们更好地跟踪问题?

标签: python numpy numpy-ndarray


【解决方案1】:

您正在尝试将np.mod 与第一个元素一起用作列表。这不受支持。相反,您需要将列表的每个元素传递给 mod 函数,然后再创建一个列表。

你可以这样做。

linearNumericEncryptedWordArray = [np.mod(x, 33) for x in keyMatrix.dot(X)]

请注意,您可能还需要在下一行中执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2013-10-04
    • 2021-06-16
    相关资源
    最近更新 更多