【问题标题】:Python creating a smaller sub-array from a larger 2D NumPy array?Python 从更大的 2D NumPy 数组创建更小的子数组?
【发布时间】:2013-06-26 12:44:23
【问题描述】:

所以我有一个大型 NumPy 数组,它采用以下形式:

data = [[2456447.64798471, 4, 15.717, 0.007, 5, 17.308, 0.019, 6, 13.965, 0.006],
        [2456447.6482855, 4, 15.768, 0.018, 5, 17.347, 0.024, 6, 14.001, 0.023],
        [2456447.648575, 4, 15.824, 0.02, 5, 17.383, 0.024, 6, 14.055, 0.023]]

我想创建一个如下所示的子数组:

[[4, 15.717, 5, 17.308, 6, 13.965], 
 [4, 15.768, 5, 17.347, 6, 14.001],
 [4, 15.824, 5, 17.383, 6, 14.055]]

基本上我想选择第一列,然后从第 4 列开始,我想选择每 3 列。我试图弄清楚如何使用 data[1:6:?] 之类的东西来解决这个问题,但我不明白如何逐步完成并只获得我想要的列。

此外,我还需要对水平扩展的数组进行扩展。所以我不只是想对列值进行硬编码。

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    你可以这样做:

    >>> data[:, [1, 2, 4, 5, 7, 8]]
    array([[  4.   ,  15.717,   5.   ,  17.308,   6.   ,  13.965],
           [  4.   ,  15.768,   5.   ,  17.347,   6.   ,  14.001],
           [  4.   ,  15.824,   5.   ,  17.383,   6.   ,  14.055]])
    

    【讨论】:

    • 这里发生了什么,用列表切片符号?为什么冒号后面有逗号?
    • @Stephan,因为data 是一个 NumPy 数组,它可以通过整数索引来访问。该列表也可以是另一个数组。 The docs for it are here。逗号分隔沿轴的切片。所以data[1:2, :] 会选择第一行和所有列,而data[:, 1:2] 会选择所有行和第一列。
    • 你确定data[1:2] 没有得到第二个项目吗?我认为 slice 的索引为 0,所以 data[0:1] 会得到第一项
    • 第一个在第零之后。我遵循原始问题中的符号。抱歉我没说清楚。
    【解决方案2】:

    这样就可以解决问题,它可以水平和垂直缩放,而且简单有效。

    subArray = []
    newRow = []
    for row in data:
        for i in xrange(0,len(row)):
            if (i % 3 == 0):
                continue
            newRow.append(row[i])
        subArray.append(newRow)
        newRow = []
    

    【讨论】:

    • 如果您需要它是可扩展的而不是静态大小的,请告诉我,我可以更改代码
    • 是的,我试图做一些可扩展的东西,因为我的实际数据数组在水平和垂直方向上都要长得多。如果您有一个可扩展的解决方案,那就太棒了!
    • 感谢您到目前为止的帮助。我运行了您的代码,但出现以下错误:if (row.index(element) % 3 == 0): AttributeError: 'numpy.ndarray' object has no attribute 'index'
    • @sTr8_Struggin 那是因为你的数据实际上是一个 numpy 数组,试试我的新代码
    • @sTr8_Struggin 如果您使用的是 python 3.x,您应该将 x 从 xrange 中去掉
    猜你喜欢
    • 2019-03-02
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2018-01-15
    • 2017-04-06
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多