Не понимаю эту ошибку IndexError, используя numpy

Вы должны использовать Задачи. Если вы выполняете длительную операцию при нажатии кнопки, вы блокируете поток пользовательского интерфейса JavaFX. Взгляните сюда: https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm

-1
задан martineau 19 January 2019 в 15:48
поделиться

2 ответа

np.size(), без оси, дает вам общее количество элементов в матрице. Таким образом, ваши range() будут идти от 0 до 8, а не от 0 до 2.

Вам не нужно использовать np.size() или np.shape() в этом отношении; Эти функции даже не перечислены в документации. Просто используйте атрибут .shape матрицы:

y = np.zeros(x.shape)

for i in range(x.shape[0]):
    for j in range(x.shape[1]):

Существуют более эффективные способы получения выходных данных. Вместо этого вы можете использовать:

def symmetrize(x):
    return x + x.T - np.diag(x.diagonal())

. x.T - это транспонированная матрица , поэтому строки и столбцы меняются местами. x + x.T является суммой исходной матрицы и матрицы транспонирования, поэтому числа на диагонали удваиваются. x.diagonal() - это массив только тех чисел на диагонали, которые можно вычесть, как только вы создали матрицу из этих чисел на диагонали, что и делает np.diag() для вы.

0
ответ дан Martijn Pieters 19 January 2019 в 15:48
поделиться

Вы используете np.size() неправильно, он не сообщает вам, сколько строк или столбцов в вашем списке, но количество элементов в массиве, в вашем случае - 9. Вы можете использовать форму вашего списка следующим образом:

def symmetrize(x):

    ## The symmetrized matrix that is returned
    y = np.zeros(np.shape(x))

    ## For loop for each element (i,j) in the matrix
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            if i == j:
                y[i,j] = x[i,j]
            else:
                y[i,j] = x[i,j] + x[j,i]
    return y
0
ответ дан Filip Młynarski 19 January 2019 в 15:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: