numpy:想要提取一列,给出一行

时间:2014-07-07 09:35:58

标签: python numpy matrix

我从MATLAB到Python,我遇到了处理矩阵的一些问题。

所以,我有一个矩阵(实现为np.array),我想操纵该矩阵的列。

所以,我从初始化开始:

x = np.nan * np.ndarray((2,8))
y = np.nan * np.ndarray((2,8))

哪两个

array([[ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
   [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan]])

现在,我想在v内放置一个列向量y来计算x内的内容

v = np.array([[v1, v2]]) # if v = np.array([[v1], [v2]], doesn't compute on next line
y[:,0] = np.copy(v)
x[:,0] = y[:,0] + someRandomVector

它给我一个错误:

ValueError: could not broadcast input array from shape (2,2) into shape (2)

我认为问题来自于x[:,0]没有像我预期的那样给出列向量而是

>>> x[:,0]
array([ nan,  nan])

任何可能有用的想法或提示?

1 个答案:

答案 0 :(得分:2)

>>>x[:,0:1] 
print x.[:,0:1].shape
(2,1)

在此post中解释了动机以及如何在numpy中管理数组。

  

这对你的情况意味着当你写X [:,4]时,你有一个切片表示法和一个常规索引表示法。切片表示法表示沿第一维度的所有索引(仅为0和1,因为数组具有两行),而4表示沿第二维度的第五个元素。常规索引的每个实例基本上将返回对象的维度减少一个,因此由于X是一个2D数组,并且有一个常规索引,因此得到一维结果。 Numpy只显示1D数组作为行向量。诀窍,如果你想得到你开始使用的相同尺寸的东西,那就是使用所有切片索引,就像我在本文顶部的例子中所做的那样。

     

如果你想提取第五列更多的东西   总共5列,你可以使用X [:,4:5]。如果你想要一个视图   第3-4行和第5-7行,你会做X [3:5,5:8]。希望你明白   这个想法。