编辑:谢谢大家的好解决方案,我想如果我必须选择一个,那就是A[:,[0]]
我现在收集了7种方法并将它们放入IPython notebook。时间基准并不令人惊讶:它们在速度方面大致相同。
非常感谢您的建议!
我正在寻找一种迭代矩阵列的好方法,并将它们作为1xd列向量返回。我有一些想法,但我不认为那些是好的解决方案。我想我在这里遗漏了一些东西。你会推荐哪种方式?例如,假设我有以下矩阵,并希望将第一列作为列向量返回:
A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])
>>> A
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
默认情况下,numpy会像这样返回:
>>> A[:,0]
array([1, 4, 7])
>>> A[:,0].shape
(3,)
我想要的是这个:
array([[1],
[4],
[7]])
.shape
=(3,1)
转置不能将其作为列向量返回。
>>> A[:,0].T
array([1, 4, 7])
>>> A[:,0]
array([1, 4, 7])
我每次都要创建一个新轴
>>> A[:,0][:,np.newaxis].shape
(3, 1)
>>> A[:,0][:,np.newaxis]
array([[1],
[4],
[7]])
或者在做了一些实验之后,我想出了其他类似的解决方法:
>>> A[:,0:1]
array([[1],
[4],
[7]])
>>> A[:,0].reshape(A.shape[1],1)
array([[1],
[4],
[7]])
答案 0 :(得分:1)
我最喜欢的解决方案是切片。你有不同的解决方案:
A[:,0:1] # not so clear
A[:,:1] # black magic
A[:,[0]] # clearest syntax imho
关于reshape
解决方案,您可以增强如下语法:
A[:,0].reshape(A.shape[1],1)
A[:,0].reshape(-1,1)
您还可以合并以下内容:
A[:,0][:,np.newaxis] # ->
A[:,0,np.newaxis] # or
A[:,np.newaxis,0]
答案 1 :(得分:0)
一种方法是使用numpy.row_stack
或numpy.vstack
:
In [91]: np.row_stack(A[:,0])
Out[91]:
array([[1],
[4],
[7]])
In [92]: np.vstack(A[:,0])
Out[92]:
array([[1],
[4],
[7]])
答案 2 :(得分:0)
您可以使用column_stack:
>>> A
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> np.column_stack((A[:,0],))
array([[1],
[4],
[7]])
>>> # ^^^^^^^ a tuple
请确保您为单个列提供1个元素的元组,否则您会得到不同的东西:
>>> np.column_stack(A[:,0])
array([[1, 4, 7]])