我有一个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])
的以下输出:
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()
的最佳方法是什么?如果没有,最好的方法是什么?
答案 0 :(得分:3)
您可能正在寻找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
应该有效,你只是错误地看输出。
答案 1 :(得分:3)
您正在使用reshape
。
arr2 = arr1.reshape((100,20))
它的形状为(100,20),与没有最后一个维度的arr1
相同。
arr1[0]
具有形状(20,1),因此打印为列。
arr2[0]
具有形状(20,),因此打印为行(计算括号)。您可能不喜欢显示,但形状是正确的。
squeeze
也可以用来取出额外的维度,但结果会相同。
print(arr2[0][:,None])
应作为列打印。它在打印之前有效地增加了额外的尺寸。