Несоответствие формы Python

Итак, я пытаюсь создать трехмерный массив с некоторыми стандартными значениями, определенными мной (на самом деле другими людьми, но это не имеет значения). Это мой код:

Tt = 120 # Total duration (sec)
delta = 0.001 # Time bin (sec)
T = Tt/delta # number of time bins
Ncells = 8;
Cmap = np.zeros([Ncells,Ncells,int(T)])
ExcInhID = np.expand_dims([1, -1, 1, -1, 1, -1, 1], axis =1)
a = list(range(0,int(T)))

for t in a:
    Cmap[:,:,t] = (-1)*np.identity(Ncells)
    Cmap[1:,0,t] = list(ExcInhID*np.ones([Ncells-1,1])*(1 - min(max(t-T/3,0)*(1/(T/3)),0)))
    CC5 = list(np.arange(0,Ncells)) ; del CC5[4];
    Cmap[CC5,4,t] = list(ExcInhID*np.ones([Ncells-1,1])*(min(max(t-T/3,0)*(1/(T/3)),0)))
    Cmap[6,2,t] = 1; Cmap[5,7,t] = -1; Cmap[1,5,t] = 1;

Это работает, пока

Cmap[CC5,4,t] = list(ExcInhID*np.ones([Ncells-1,1])*(min(max(t-T/3,0)*(1/(T/3)),0)))  Cmap[CC5,4,t] = list(ExcInhID*np.ones([Ncells-1,1])*(min(max(t-T/3,0)*(1/(T/3)),0)))

Где я получаю ошибку:

ValueError: несоответствие формы: массив значений формы (7,1) не может быть передан в результат индексации формы (7,)

Что странно, так как это работало на другой строке здесь:

 Cmap[1:,0,t] = list(ExcInhID*np.ones([Ncells-1,1])*(1 - min(max(t-T/3,0)*(1/(T/3)),0)))

Я перепробовал все и не знаю, что делать дальше. У кого-нибудь из вас есть предложения?


person JoeyvH    schedule 16.01.2019    source источник


Ответы (1)


Я не совсем уверен, почему вы не получили ошибку в первом случае и получили только во втором. Но если вы измените свои строки, как показано ниже, все будет работать.

Из

Cmap[1:,0,t] = list(ExcInhID*np.ones([Ncells-1,1])*(1 - min(max(t-T/3,0)*(1/(T/3)),0)))
....
Cmap[CC5,4,t] = list(ExcInhID*np.ones([Ncells-1,1])*(min(max(t-T/3,0)*(1/(T/3)),0)))

to

Cmap[1:,0,t] = np.stack(ExcInhID*np.ones([Ncells-1,1])*(1 - min(max(t-T/3,0)*(1/(T/3)),0)), axis=1)
....
Cmap[CC5,4,t] = np.stack(ExcInhID*np.ones([Ncells-1,1])*(min(max(t-T/3,0)*(1/(T/3)),0)), axis=1)
person najeem    schedule 16.01.2019