Как я могу исправить эту ошибку в моем двойном цикле? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь вычислить следующее:

E_inc_j

tilde{k}

def E_inc_j(tilde_k, x, vecinc):
    n = x.shape[0]
    e = np.zeros((n, 3))

    for i in range(n):
        for j in range(3):
            e[i] = np.exp(1j * tilde_k * x[i]) * vecinc

    return e

def x(n):
    return np.random.randint(100, size=(n, 3))

lam = 0.5
k = (2 * np.pi)/lam
theta = 0
K = k * np.array([[0], [np.sin(theta)], [np.cos(theta)]])
vecinc = np.array([[1], [0], [0]])

E_inc_j_test = E_inc_j(K, x(5), vecinc) 
print(E_inc_j_test)

Я получаю сообщение об ошибке "не удалось передать входной массив изпреобразовать (3,3) в форму (3) "на линии e[i] = np.exp(1j * tilde_k * x[i]) * vecinc.

***** Конечным результатом должен быть вектор 3N на 1.*****

1 Ответ

0 голосов
/ 05 июня 2019

Нет необходимости использовать цикл for:

import numpy as np

k = 10.
theta = 0.3
K = k * np.array([0, np.sin(theta), np.cos(theta)])

x = np.random.randint(100, size=(7, 3))
vecinc = np.array([1, 0, 0])

e = np.exp(1j * K * x) * vecinc
# array([[ 1.+0.j,  0.+0.j,  0.-0.j],
#        [ 1.+0.j,  0.-0.j,  0.-0.j],
#        [ 1.+0.j,  0.+0.j,  0.+0.j],
#        [ 1.+0.j,  0.-0.j, -0.+0.j],
#        [ 1.+0.j,  0.+0.j, -0.+0.j],
#        [ 1.+0.j,  0.-0.j,  0.+0.j],
#        [ 1.+0.j, -0.+0.j, -0.+0.j]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...