【问题标题】:Python: adding index as new column to 2D arrayPython:将索引作为新列添加到二维数组
【发布时间】:2021-04-21 01:04:50
【问题描述】:

假设我有如下的 np.array

dat = array([[ 0,  1,  0],
[ 1,  0,  0],
[0, 0, 1]]
)

我想要做的是将(行的索引 + 1)作为新列添加到该数组中,就像

newdat = array([[ 0,  1,  0, 1],
[ 1,  0,  0, 2],
[0, 0, 1, 3]]
)

我应该如何做到这一点。

【问题讨论】:

  • concatenate 是你的朋友。阅读它的文档
  • 这行得通吗? np.hstack([dat, np.linspace(1, dat.shape[0], dat.shape[0]).reshape((-1, 1))])
  • np.c_[dat,1:len(dat)+1]

标签: python python-3.x list numpy numpy-ndarray


【解决方案1】:

您也可以使用np.append()。您还可以在此处获取有关[...,None] 的更多信息

import numpy as np

dat = np.array([
    [0, 1, 0],
    [1, 0, 0],
    [0, 0, 1]
])

a = np.array(range(1,4))[...,None] #None keeps (n, 1) shape
dat = np.append(dat, a, 1)

print (dat)

这个输出将是:

[[0 1 0 1]
 [1 0 0 2]
 [0 0 1 3]]

或者你可以使用 hstack()

a = np.array(range(1,4))[...,None] #None keeps (n, 1) shape
dat = np.hstack((dat, a))

正如 hpaulj 提到的,np.concatenate 是要走的路。您可以阅读有关concatenate 文档的更多信息。另外,请参阅stackoverflow

上的其他连接示例
dat = np.concatenate([dat, a], 1)

【讨论】:

  • 由于np.append 经常被滥用,我更愿意看到dat = np.concatenate([dat, a], 1) 被使用(或者当然是hstack)。
【解决方案2】:

使用numpy.column_stack:

newdat = np.column_stack([dat, range(1,dat.shape[0] + 1)])
print(newdat)
#[[0 1 0 1]
# [1 0 0 2]
# [0 0 1 3]]

【讨论】:

    【解决方案3】:

    使用numpy.insert() 尝试这样的事情:

    import numpy as np
    
    dat = np.array([
        [0, 1, 0],
        [1, 0, 0],
        [0, 0, 1]
    ])
    
    dat = np.insert(dat, 3, values=[range(1, 4)], axis=1)
    
    print(dat)
    

    输出:

    [[0 1 0 1]
     [1 0 0 2]
     [0 0 1 3]]
    

    更一般地说,您可以使用numpy.ndarray.shape 来调整大小:

    dat = np.insert(dat, dat.shape[1], values=[range(1, dat.shape[0] + 1)], axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多