сетка над функцией, содержащей собственные значения - PullRequest
0 голосов
/ 14 октября 2019

Мне нужно оценить собственные значения матрицы, которая содержит переменные (см. Упрощенный код ниже). Функция «test» входит в другие функции позже, и в конце я хочу оценить функцию по сетке.

Пока что я делаю это с np.vectorize и вложенными for циклами (очень медленно) ихотите увеличить скорость оценки с помощью numpy.meshgrid для функций. Тем не менее, единственное, что я получаю, это сообщение об ошибке

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print(test(xx,yy))
  File "test.py", line 4, in test
    return np.linalg.eig(np.array([[1,x],[2,y]]))
ValueError: setting an array element with a sequence.

Я читаю в потоке

Numpy ValueError: установка элемента массива с последовательностью. Это сообщение может появиться без существующей последовательности?

, но не понял, как я могу применить представленные там решения к моей проблеме.

import numpy as np

def test(x,y):
    return np.linalg.eig(np.array([[1,x],[2,y]]))

xx,yy =np.meshgrid(np.linspace(0,1,5),np.linspace(0,1,5),sparse=True)

print(test(xx,yy))

1 Ответ

0 голосов
/ 21 октября 2019

Ваша проблема в этой строке:

np.array([[1,x],[2,y]])

xx - это уже матрица с формой (1,5), а yy имеет форму (5,1), и поэтому вышеупомянутая линия не работает.

Не совсем понятно, как вы хотите объединить эти матрицы, но, предположив, что вы как-то это сделали, np.linalg.eig ожидает квадратный массив.

Если бы я мог рискнуть, вы хотитечтобы создать xx, yy с плотной сеткой и оценить некоторую функцию f (x, y) над сеткой - это даст вам квадратный массив, который вы затем сможете использовать с np.linalg.eig

Например:

import numpy as np

def test(z):
   w,v = np.linalg.eig(z)
   return w #These are the eigenvalues

xx,yy = np.meshgrid(np.linspace(0, 1, 5), np.linspace(0, 1, 5), sparse=False)
z = np.sin(xx**2 + y**2)
print(test(z))
...