结果不一致 - Jupyter Numpy和Transpose

问题描述 投票:0回答:1

enter image description here

我对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)
#---------------------------------   
arrays numpy jupyter transpose
1个回答
1
投票

从你的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数组不会产生任何影响。

© www.soinside.com 2019 - 2024. All rights reserved.