我在使用Jupyter / Numpy / Tranpose()/ 1D数组时表现出奇怪的行为。
我发现了另一篇文章,其中transpose()不会不转置一维数组,但是在以前的Jupyter笔记本中,确实如此。
我有一个不一致的示例,但我不明白:
如果2个或多或少相同的阵列具有2个不同的输出,请查看我的jupyter笔记本所附的图片。
似乎对和不对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)
#---------------------------------
答案 0 :(得分:1)
从通话中将size=1
移至numpy.random.normal
。然后它将返回一个 scalar ,而不是长度为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的转置操作会交换尺寸,但不会创建新尺寸,因此转置一维数组不会执行任何操作。