Почему массив имеет значение, отличное от ожидаемого? - PullRequest
0 голосов
/ 08 апреля 2020

Я изменил атрибуты класса с:

self.firstBase = np.array([1, 0])
self.secondBase = np.array([0, 1])

на

self.base = np.array([[1, 0], [0, 1]])

С тех пор операция умножения этих двух векторов на матрицу Адамара возвращает неправильное значение.

def H(self):
    H = np.array([[1 / math.sqrt(2), 1 / math.sqrt(2)],
                  [1 / math.sqrt(2), - 1 / math.sqrt(2)]])

    topValue = H[0][0] * self.base[0][0] + H[0][1] * self.base[0][1]
    bottomValue = H[1][0] * self.base[0][0] + H[1][1] * self.base[0][1]
    self.base[0] = np.array([topValue, bottomValue])

    topValue = H[0][0] * self.base[1][0] + H[0][1] * self.base[1][1]
    bottomValue = H[1][0] * self.base[1][0] + H[1][1] * self.base[1][1]
    self.base[1] = np.array([topValue, bottomValue])

    return self

Я провел некоторое тестирование и обнаружил, что вычисления все еще верны, но когда я инициализирую

 self.base[0] = np.array([topValue, bottomValue])

и

self.base[1] = np.array([topValue, bottomValue])

, это дает мне [0, 0] и [0 , 0] в результате.

Почему это так? Что за исправление?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Изменить self.base тип данных на float

self.base = np.array([[1, 0], [0, 1]], dtype=float)

1 голос
/ 08 апреля 2020

Это происходит потому, что вы пытаетесь присвоить значения с плавающей точкой целочисленному массиву. Следовательно, необходимо инициализировать self.base, используя вместо этого значения с плавающей запятой следующим образом:

  1. использовать self.base = np.array([1.0, 0.0], [0.0, 1.0])
  2. или self.base = np.array([[1, 0], [0, 1]], dtype=float)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...