我从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])
任何可能有用的想法或提示?
答案 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]。希望你明白 这个想法。