我对Jupyter / Numpy / Transpose()/ 1D阵列的行为很奇怪。
我找到了另一篇文章,其中transpose()不会转换一维数组,但在以前的Jupyter笔记本中,它确实如此。
我有一个不一致的例子,我不明白:
如果2个或多或少相同的阵列有2个不同的输出,请查看我的jupyter笔记本附带的图片。
它似乎是IS和IS不是转置1D阵列。不一致是不好的
输出是(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)
#---------------------------------
从你的size=1
电话中删除numpy.random.normal
。然后它将返回标量而不是长度为1的1-d数组。
例如,
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-d数组不会产生任何影响。