【问题标题】:How to add ones to matrix?如何将一个添加到矩阵中?
【发布时间】:2016-03-27 12:02:11
【问题描述】:

我有一个数组:

X = [[2, 2, 2],
     [3, 3, 3],
     [4, 4, 4]]

我需要在 numpy 数组中添加额外的列,并使用 hstack 和 reshape 填充它。像这样:

X = [[2, 2, 2, 1],
     [3, 3, 3, 1],
     [4, 4, 4, 1]]

我做什么:

X = np.hstack(X, np.ones(X.reshape(X, (2,3))))

然后得到一个错误:

TypeError: only length-1 arrays can be converted to Python scalars

有什么问题?我做错了什么?

【问题讨论】:

  • 试试np.column_stack
  • 问题出在np.ones() 电话中。你给了它一个数组,而不是一个维度的元组。单独试验一下。

标签: python arrays numpy reshape


【解决方案1】:

这是numpy.appendnumpy.hstacknumpy.column_stack 的几种方法:

# numpy is imported as np
>>> x
array([[2, 2, 2],
       [3, 3, 3],
       [4, 4, 4]])
>>> np.append(x, np.ones([x.shape[0], 1], dtype=np.int32), axis=1)
array([[2, 2, 2, 1],
       [3, 3, 3, 1],
       [4, 4, 4, 1]])
>>> np.hstack([x, np.ones([x.shape[0], 1], dtype=np.int32)])
array([[2, 2, 2, 1],
       [3, 3, 3, 1],
       [4, 4, 4, 1]])
>>> np.column_stack([x, np.ones([x.shape[0], 1], dtype=np.int32)])
array([[2, 2, 2, 1],
       [3, 3, 3, 1],
       [4, 4, 4, 1]])

【讨论】:

  • 谢谢 timgeb。你使用形状。用 reshape 解决这个问题不可能是真的?
  • @AlexSavin reshaping 将返回一个具有新形状的新数组,我认为这不会有太大帮助,因为您无法通过 reshaping 更改数组的总大小。
  • @timggeb 好的,该实现将一列添加到矩阵的末尾(np.hstack ...)。但是如何将一列添加到矩阵的开头?
  • @AlexSavin 只是切换参数的顺序,即np.hstack([np.ones([x.shape[0], 1], dtype=np.int32), x])
【解决方案2】:

你可以使用numpy.insert():

>>> X
array([[2, 2, 2],
       [3, 3, 3],
       [4, 4, 4]])

矩阵开头的:

>>> X=np.insert(X,0,1.0,axis=1)
>>> X
array([[1, 2, 2, 2],
       [1, 3, 3, 3],
       [1, 4, 4, 4]])

矩阵末尾的个数

>>> X=np.insert(X,3,1.0,axis=1)
>>> X
array([[2, 2, 2, 1],
       [3, 3, 3, 1],
       [4, 4, 4, 1]])

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2011-08-10
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多