#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. Черт возьми! хаха, я полностью пропустил это .. это сработало! огромное спасибо за ваш быстрый ответ, Уоррен!