【问题标题】:Concatenating numpy vector and matrix horizontally水平连接numpy向量和矩阵
【发布时间】:2016-01-29 01:30:25
【问题描述】:

我有以下 numpy 向量 m 和矩阵 n

import numpy as np
m = np.array([360., 130., 1.])
n = np.array([[60., 90., 120.], 
              [30., 120., 90.],
              [1.,  1.,   1. ]])

我想要做的是水平连接它们导致

np.array([[60., 90., 120.,360.], 
          [30., 120., 90., 130.],
          [1.,  1.,   1., 1. ]])

有什么办法呢?

我试过了,但失败了:

np.concatenate(n,m.T,axis=1)

【问题讨论】:

  • 'np.concatenate(n,m.reshape((1,-1)))' 怎么样?
  • 这就是column_stack 的用途:np.column_stack([n, m])

标签: python arrays numpy matrix


【解决方案1】:
>>> np.hstack((n,np.array([m]).T))
array([[  60.,   90.,  120.,  360.],
       [  30.,  120.,   90.,  130.],
       [   1.,    1.,    1.,    1.]])

问题是因为m只有一维,它的转置还是一样的。在进行转置之前,您需要使其具有形状 (1,3) 而不是 (3,)。

按照 DSM 在 cmets 中的建议,一个更好的方法是 np.hstack((n,m[:,None]))

【讨论】:

  • 您可以使用m[:,None] 而不是np.array([m]).T 来提升维度。
  • hstack 的这种用法实际上是np.concatenate((n, m[:,None]), axis=1)
【解决方案2】:

实现目标的一种方法是将m 转换为listlist

import numpy as np
m = np.array([360., 130., 1.])
n = np.array([[60., 90., 120.],
              [30., 120., 90.],
              [1.,  1.,   1. ]])
m = [[x] for x in m]
print np.append(n, m, axis=1)

另一种方式是使用np.c_

import numpy as np
m = np.array([360., 130., 1.])
n = np.array([[60., 90., 120.],
              [30., 120., 90.],
              [1.,  1.,   1. ]])
print np.c_[n,m]

【讨论】:

  • 很好地使用了c_。我们没有看到它用得太多。但从根本上说,它是concatenate 的语法糖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2013-03-22
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多