Я пользователь MatLab, недавно перешедший на Python. Я запускаю цикл for, который разрезает более длинный сигнал на отдельные испытания, нормализует их до 100% испытания, а затем хотел бы, чтобы испытания были перечислены горизонтально в одной переменной. Мой код
RHipFE=np.empty([101, 1])
newlength = 101
for i in range(0,len(R0X)-1,2):
iHipFE=redataf.RHipFE[R0X[i]:R0X[i+1]]
x=np.arange(0,len(iHipFE),1)
new_x = np.linspace(x.min(), x.max(), newlength)
iHipFEn = interpolate.interp1d(x, iHipFE)(new_x)
RHipFE=np.concatenate((RHipFE,iHipFEn),axis=1)
Когда я запускаю это, я получаю сообщение об ошибке «ValueError: все входные массивы должны иметь одинаковое количество измерений». Я предполагаю, что это потому, что RHipFE - это (101,1), а iHipFEn - (101,). Лучшее решение - сделать iHipFEn (101,1)? Если да, то как это сделать в цикле for выше?
В MATLAB все матрицы имеют размер 2d или больше. В numpy они могут быть 1d (или даже 0d). a[:,None] - наиболее идиоматичный способ добавления конечного измерения.






Обычно быстрее собирать массивы в список и один раз использовать некоторую форму конкатенации. Список append быстрее, чем concatenate:
In [51]: alist = []
In [52]: for i in range(3):
...: alist.append(np.arange(i,i+5))
...:
In [53]: alist
Out[53]: [array([0, 1, 2, 3, 4]), array([1, 2, 3, 4, 5]), array([2, 3, 4, 5, 6])]
Различные способы присоединения
In [54]: np.vstack(alist)
Out[54]:
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6]])
In [55]: np.column_stack(alist)
Out[55]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
In [56]: np.stack(alist, axis=1)
Out[56]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
In [57]: np.array(alist)
Out[57]:
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6]])
Внутри vstack, column_stack, stack расширяют размер компонентов и объединяются на соответствующей оси:
In [58]: np.concatenate([l[:,None] for l in alist],axis=1)
Out[58]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
Спасибо! Да, я решил добавлять списки вместо объединения. Затем я использовал vstack, чтобы сложить их все в массив и транспонировать его.
Может пригодиться: docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.h tml