Непоследовательные результаты - Jupyter Numpy & Transpose - PullRequest
0 голосов
/ 21 марта 2019

введите описание изображения здесь

Я получаю странное поведение с массивами Jupyter / Numpy / Tranpose () / 1D.

Я нашел другой пост, где transpose () будет не транспонировать 1D массив, но в предыдущих ноутбуках Jupyter это так.

У меня есть пример, когда он противоречив, и я не понимаю:

Пожалуйста, смотрите изображение, прикрепленное к моему ноутбуку Jupyter, если 2 более или менее идентичных массива с 2 разными выходами.

Кажется, что это и не транспонирует одномерный массив. Несоответствие это плохо

выводит (1000,) и (1,1000), почему это происходит?

# GENERATE WAVEORM:
#---------------------------------------------------------------------------------------------------
N   = 1000
fxc = []
fxn = []
for t in range(0,N):
    fxc.append(A1*m.sin(2.0*pi*50.0*dt*t) + A2*m.sin(2.0*pi*120.0*dt*t))
    fxn.append(A1*m.sin(2.0*pi*50.0*dt*t) + A2*m.sin(2.0*pi*120.0*dt*t) + 5*np.random.normal(u,std,size=1))
#---------------------------------------------------------------------------------------------------


# TAKE TRANSPOSE:
#---------------------------------
fc = np.transpose(np.array(fxc))
fn = np.transpose(np.array(fxn))
#---------------------------------


# PRINT DIMENSION:
#---------------------------------
print(fc.shape)
print(fn.shape)
#---------------------------------   

1 Ответ

1 голос
/ 21 марта 2019

Удалить size=1 из вашего звонка на numpy.random.normal.Затем он вернет скаляр вместо 1-го массива длиной 1.

Например,

In [2]: np.random.normal(0, 3, size=1)
Out[2]: array([0.47058288])

In [3]: np.random.normal(0, 3)
Out[3]: 4.350733438283539

Использование size=1 в вашем коде являетсяпроблема, потому что это приводит к тому, что fxn представляет собой список 1-d массивов (например, что-то вроде [[0.123], [-.4123], [0.9455], ...]. Когда NumPy преобразует это в массив, он имеет форму (N, 1). Транспонирование такого массива приводит к форме (1, N).

fxc, с другой стороны, представляет собой список скаляров (например, что-то вроде [0.123, 0.456, ...]). При преобразовании в массив NumPy это будет 1-й массив с формой (N,). Операция транспонирования NumPy меняет размеры, но не создает новые измерения, поэтому транспонирование 1-го массива ничего не делает.

...