【问题标题】:Getting only particular columns in every row in a numpy array [duplicate]仅获取numpy数组中每一行的特定列[重复]
【发布时间】:2013-01-17 00:26:26
【问题描述】:

可能重复:
numpy: access an array by column

我有一个 numpy 数组(numpy 被导入为 np)

gona = np.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

我可以通过 gona[1][:] 获取第一行整列的值。

数组([4, 5, 6])

但是,如果我尝试获取所有行的特定列的所有值(比如我想要每一行中第一列的值),我会尝试 gona[:][1].但是我得到的结果和以前一样。

这可能是什么原因?我如何在 numpy 中做这样的事情?

【问题讨论】:

  • 没有。我想知道为什么这两种方法也会给出相同的结果

标签: python numpy python-2.7


【解决方案1】:

像这样:

gona = numpy.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

# List comprehension, just get each element in 'gona', and then get first element in that list
out = [x[0] for x in gona]

print out

输出:

>>> 
[1, 4, 7, 10]
>>> 

【讨论】:

    【解决方案2】:

    你实际上想要这样做:

    >>> a
    array([[ 1,  2,  3],
           [ 4,  5,  6],
           [ 7,  8,  9],
           [10, 11, 12]])
    >>> a[:,1]
    array([ 2,  5,  8, 11])
    

    a[:] 只返回整个数组,所以a[:][1] 返回a 的第二行。我认为这就是您产生困惑的地方。

    有关索引多维数组的更多信息,请参阅Tentative Numpy Tutorialthis 部分。

    【讨论】:

    • a[:][1] 选择第二行
    • 糟糕。你说得对。我已经更正了。
    • 这完成了工作。谢谢
    • 逗号是什么意思?
    • 逗号是轴分隔符,所以在本例中,我选择沿第一个轴的所有元素,仅沿第二个轴选择第二个元素。
    【解决方案3】:

    在大括号的位置方面似乎有点混乱,gona[:][1] 首先从数组中选择所有内容,然后从该数组中选择第二行。要选择特定列,请将索引放在以逗号分隔的相同方括号内:

    gona = np.array([[ 1,  2,  3],
           [ 4,  5,  6],
           [ 7,  8,  9],
           [10, 11, 12]])
    
    gona[1,:]
    Out[21]: array([4, 5, 6])
    
    gona[:,1]
    Out[22]: array([ 2,  5,  8, 11])
    
    gona[:,0]
    Out[23]: array([ 1,  4,  7, 10])
    

    例如,您也可以只选择一系列行

    gona[0:2,0] # only take the two first rows of the first column
    Out[24]: array([2, 5])
    

    【讨论】:

    • 另外感谢您选择一系列行代码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多