Ошибка «только массивы длины 1 могут быть преобразованы в скаляры Python» при попытке умножить матричные элементы в цикле? - PullRequest
0 голосов
/ 27 мая 2019

Функция alpha_j должна возвращать матрицу 3x3. Вход A является блочной диагональной матрицей, а a является скаляром (V_0 * 3 * chi) / (chi + 3). Rho - случайная матрица 3x1.

Я пытаюсь создать эту матрицу 3x3 путем умножения rho, скалярной альфы и матрицы A.

def alpha_j(a, A):
    alph = np.array([[0,0,0],[0,0,0],[0,0,0]],complex)
    rho = np.random.rand(3,1)
    for i in range(0, 2):
        for j in range(0, 2):
            alph[i][j] = (rho[i] * a * A[i][j])
    return alph

chi = 10 + 1j
V_0 = (0.05)**3
alpha = (V_0 * 3 * chi)/(chi + 3)
A = np.matlib.identity(3)

test = alpha_j(alpha, A)
print(test)

Я все время получаю сообщение об ошибке "только массивы длины 1 могут быть преобразованы в скаляры Python". Я не понимаю, что не так. Пожалуйста, помогите: /

1 Ответ

0 голосов
/ 27 мая 2019

Ваша индексация неверна.Вы используете [i][j], когда вам нужно использовать [i,j] для пустых массивов.

>> A = np.matlib.identity(3)
>> A
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

>> A[0][0]
matrix([[1., 0., 0.]])
>> A[0,0]
1.0

Таким образом, вы получаете вектор строки, когда ожидаете скаляр.

Я должен отметить, что поиск Google по вашему сообщению об ошибке обнаружил TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python при отображении графика , что было полезно.

Это также хорошопопрактикуйтесь в print(type(suspect_thing)) или установите точки останова и используйте отладчик для проверки переменных по мере продвижения.Это может всплеснуть эти проблемы прямо там, где вы можете их увидеть.Я, например, скопировал ваш код в мой редактор и запустил его, отметив номер строки, где что-то пошло не так.Затем я смог увидеть, какие переменные необходимо проверить.

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