Противоречивые результаты — Jupyter Numpy

#arrays #numpy #jupyter #transpose

#массивы #numpy #jupyter #транспонировать

Вопрос:

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

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

Я нашел другой пост, в котором transpose () не будет транспонировать одномерный массив, но в предыдущих ноутбуках 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. В чем здесь ваш вопрос? Пожалуйста, напишите заголовок, который суммирует конкретную проблему с вопросом.

2. сначала посмотрите на форму np.array(fxc) и fxn. Они одномерные или 2d?

3. Посмотрите на картинку, как я и говорил.

4. @Master-P, на картинке не отображается np.array(fxc).shape и np.array(fxn).shape . Если бы вы посмотрели на них, вы бы обнаружили, что несоответствие формы возникает до того, как вы вызвали np.transpose (т. Е. на самом деле это не проблема с операцией транспонирования numpy).

5. да, я просто нарисовал это и предположил. Извините всех, также, учитывая, что единственным отличием БЫЛ случайный шум, я должен был также указать на это. Это мой первый пост, новичок в Python, спасибо всем.

Ответ №1:

Удалите size=1 из вашего вызова numpy.random.normal . Тогда он вернет скаляр вместо одномерного массива длиной 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 получается список одномерных массивов (например, что-то вроде [[0.123], [-.4123], [0.9455], ...] . Когда NumPy преобразует это в массив, он приобретает форму (N, 1) . Транспонирование такого массива приводит к форме (1, N) .

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

Комментарии:

1. Черт возьми! хаха, я полностью пропустил это .. это сработало! огромное спасибо за ваш быстрый ответ, Уоррен!