TypeError, когда concatonate две матрицы: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть две функции:

Создает матрицу идентификаторов

def m_ident(m):
  for i in range(0,m.shape[0]):
     for j in range(0,m.shape[1]):
        if i == j:
            m[i,j] = 1
        else:
            m[i,j] = 0
  return m 


def inverted_matrix(m):
   if numpy.linalg.det(m) == 0:
     return False
   x = numpy.concatenate(m,m_ident(m))
   return x

Когда я запускаю последнюю функцию для объединения матрицы 2, отображается ошибка:

File "C:/Users/JJ/OneDrive - ISCTE-IUL/EDA/Aula1.py", line 139, in inverted_matrix
x = numpy.concatenate(m,m_ident(m))

Файл "<<strong> array_function innerals>", строка 6, в объединенном TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс

1 Ответ

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

Вам необходимо передать список / последовательность в качестве первого аргумента np.concatenate , в то время как вторым параметром является ось, вдоль которой будут сцепляться массивы. Поэтому вам просто нужно изменить код следующим образом:

def inverted_matrix(m):
   if np.linalg.det(m) == 0:
     return False
   x = np.concatenate([m,m_ident(m)])
   return x

Однако обратите внимание, что m_ident меняет сам m, а не создает новую матрицу, и поэтому вы получите две сцепленные матрицы идентичности.

Чтобы избежать этого, вы можете:

def m_ident(m):
    I = np.zeros(m.shape)
    for i in range(0,m.shape[0]):
       for j in range(0,m.shape[1]):
          if i == j:
             I[i,j] = 1
    return I

или даже лучше использовать np.identity .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...