如何重塑这个numpy数组以排除“额外维度”?

2024-06-01 12:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组arr1,它是函数的输出。数组有一个“额外”维度,这是由numpy数组内部的每个元素被强制转换为numpy数组本身造成的。在

arr1.shape输出(100, 20, 1)

如果我打印数组,print(arr1[0])输出

array([[-212537.61715316],
       [   7258.38476409],
       [  37051.91250884],
       [-146278.00512207],
       [-185792.24620168],
       [-200794.59538468],
       [-195981.27879612],
       [-177912.26034464],
       [-152212.805867  ],
       [-118873.26452198],
       [ -64657.64682999],
       [ 306884.11196766],
       [-191073.9891907 ],
       [-104992.44840277],
       [ -67834.43041102],
       [ -21810.77063542],
       [  17307.24511071],
       [  55607.49775471],
       [  91259.82533592],
       [ 119207.40589797]])

如果我用arr1.reshape((100,20))重塑形状,我得到print(arr1.reshape((100,20))[0])的以下输出:

^{pr2}$

我的问题是:如何排除这个“额外的”数组,但保留数组arr1的原始形状?在

使用.reshape()是最好的方法吗?如果没有,最好的办法是什么?在


Tags: 方法函数numpy元素数组array形状print
2条回答

您可能正在寻找numpy.squeeze

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.squeeze.html

a = np.arange(10*20).reshape((10, 20, 1))
print(a.shape)
# (10, 20, 1)
a = a.squeeze()
print(a.shape)
# (10, 20)

请注意另一个答案,因为您的reshape应该已经起作用了,您只是错误地查看了输出。在

您正确地使用了reshape。在

 arr2 = arr1.reshape((100,20))

它的形状将是(100,20),与没有最后一个维度的arr1相同。在

arr1[0]具有形状(20,1),因此打印为列。在

arr2[0]具有形状(20,),因此打印为一行(计算括号)。您可能不喜欢显示,但形状是正确的。在

squeeze也可以用来去掉额外的维度,但结果是一样的。在

print(arr2[0][:,None])应作为列打印。它有效地增加了额外的尺寸在打印之前。在

相关问题 更多 >