Lep*_*ist 5 python arrays numpy vector
我有一个似乎是一个简单的问题.
观察代码:
In : x=np.array([0, 6])
Out: array([0, 6])
In : x.shape
Out: (2L,)
Run Code Online (Sandbox Code Playgroud)
这表明该数组没有第二个维度,因此x没有差别x.T.
如何使x具有尺寸(2L,1L)?这个问题的真正动机是我有一个y形状数组[3L,4L],我希望y.sum(1)是一个可以转置的矢量等.
虽然您可以重新整形数组并添加尺寸[:,np.newaxis],但您应该熟悉最基本的嵌套括号或列表符号.请注意它与显示屏的匹配程度.
In [230]: np.array([[0],[6]])
Out[230]:
array([[0],
[6]])
In [231]: _.shape
Out[231]: (2, 1)
Run Code Online (Sandbox Code Playgroud)
np.array也有一个ndmin参数,虽然它在开始时添加了额外的维度(默认位置为numpy.)
In [232]: np.array([0,6],ndmin=2)
Out[232]: array([[0, 6]])
In [233]: _.shape
Out[233]: (1, 2)
Run Code Online (Sandbox Code Playgroud)
制作2d的经典方式 - 重塑:
In [234]: y=np.arange(12).reshape(3,4)
In [235]: y
Out[235]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
Run Code Online (Sandbox Code Playgroud)
sum(和相关的功能)有一个keepdims参数.阅读文档.
In [236]: y.sum(axis=1,keepdims=True)
Out[236]:
array([[ 6],
[22],
[38]])
In [237]: _.shape
Out[237]: (3, 1)
Run Code Online (Sandbox Code Playgroud)
empty 2nd dimension不完全是术语.更像是一个不存在的第二维度.
维度可以包含0个术语:
In [238]: np.ones((2,0))
Out[238]: array([], shape=(2, 0), dtype=float64)
Run Code Online (Sandbox Code Playgroud)
如果您更熟悉MATLAB,它至少有2d,您可能会喜欢np.matrix子类.它需要采取措施确保大多数操作返回另一个2d矩阵:
In [247]: ym=np.matrix(y)
In [248]: ym.sum(axis=1)
Out[248]:
matrix([[ 6],
[22],
[38]])
Run Code Online (Sandbox Code Playgroud)
矩阵sum确实:
np.ndarray.sum(self, axis, dtype, out, keepdims=True)._collapse(axis)
Run Code Online (Sandbox Code Playgroud)
该_collapse位让它返回一个标量ym.sum().