如何将(n,)和(n,1)的numpy数组相互转换?
我明白Numpy对形状为(n,1)
的数组和形状为(n,)
的数组的处理方式是不同的,尽管它们可以存储相同的数据。
我该如何在这两种形状之间转换呢?
3 个回答
0
In [12]: import numpy as np
In [13]: a=np.arange(1, 11)
In [14]: a
Out[14]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [15]: a.shape
Out[15]: (10,)
In [16]: b=np.expand_dims(a, axis=1)
In [17]: b
Out[17]:
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10]])
In [18]: b.shape
Out[18]: (10, 1)
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
4
添加一个长度为1的轴很简单,可以用 np.newaxis
来实现:
In [188]: a = np.arange(10)
In [189]: a
Out[189]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [190]: a[:, np.newaxis]
Out[190]:
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
In [191]: a[np.newaxis, :]
Out[191]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
其实你也可以直接用 None
来代替: a[:, None]
。
想要去掉所有长度为1的轴,可以使用 np.squeeze
:
In [193]: a = np.ones((2,1,3))
In [194]: a
Out[194]:
array([[[ 1., 1., 1.]],
[[ 1., 1., 1.]]])
In [195]: a.squeeze()
Out[195]:
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
另外一种去掉长度为1的轴的方法,就是直接切掉那个轴:
In [197]: a = np.ones((3,1))
In [198]: a
Out[198]:
array([[ 1.],
[ 1.],
[ 1.]])
In [199]: a[:, 0]
Out[199]: array([ 1., 1., 1.])
6
希望下面的内容能帮助你理解它们之间的区别。使用 (n,)
时,你得到的是一个平坦的数组,而使用 (n,1)
时,你得到的是一个嵌套的数组(也就是包含 n
个只有一个元素的数组的数组):
>>> np.ones(10).reshape((10,))
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> np.ones(10).reshape((10,1))
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])