numpy: 将(n,)数组转换为(n, 1)数组的语法/习惯用法是什么?
我想把一个形状为 (n,) 的 numpy ndarray
对象转换成形状为 (n, 1) 的对象。到目前为止,我想到的最好办法是自己写一个 _to_col 函数:
def _to_col(a):
return a.reshape((a.size, 1))
但我很难相信这样一个常见的操作在 numpy 的语法中没有现成的实现。我觉得我只是没有找到合适的搜索关键词。
2 个回答
2
np.expand_dims 是我最喜欢的工具,当我想要添加任意维度时,它非常好用。
使用 None 或 np.newaxis 适合那些不需要灵活维度的代码。(这是 aix 的回答)
>>> np.expand_dims(np.arange(5), 0).shape
(1, 5)
>>> np.expand_dims(np.arange(5), 1).shape
(5, 1)
使用示例:通过任何给定的维度来去掉数组的均值。
>>> x = np.random.randn(4,5)
>>> x - x.mean(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
>>> ax = 1
>>> x - np.expand_dims(x.mean(ax), ax)
array([[-0.04152658, 0.4229244 , -0.91990969, 0.91270622, -0.37419434],
[ 0.60757566, 1.09020783, -0.87167478, -0.22299015, -0.60311856],
[ 0.60015774, -0.12358954, 0.33523495, -1.1414706 , 0.32966745],
[-1.91919832, 0.28125008, -0.30916116, 1.85416974, 0.09293965]])
>>> ax = 0
>>> x - np.expand_dims(x.mean(ax), ax)
array([[ 0.15469413, 0.01319904, -0.47055919, 0.57007525, -0.22754506],
[ 0.70385617, 0.58054228, -0.52226447, -0.66556131, -0.55640947],
[ 1.05009459, -0.27959876, 1.03830159, -1.23038543, 0.73003287],
[-1.90864489, -0.31414256, -0.04547794, 1.32587149, 0.05392166]])
10
我会使用以下代码:
a[:,np.newaxis]
还有一种替代的方法(可能稍微不那么清晰)来写同样的内容:
a[:,None]
以上所有方法(包括你自己的版本)都是常量时间操作。