【问题标题】:accessing portions of np.array访问 np.array 的部分
【发布时间】:2017-03-22 12:39:41
【问题描述】:

我想快速访问 np.array 元素,例如从 0-6 加 10 到末尾的索引。到目前为止,我已经尝试过:

a[0:6,10:]

np.concatenate(a[0:6],a[10:])

两个都给我错误,第二个给我:“TypeError:只有整数标量数组可以转换为标量索引”

编辑:连接仍然给我带来问题,所以我将在这里发布我的完整代码:

Fold_5 = len(predictorX)/5
trainX = np.concatenate(predictorX[:3*int(Fold_5)],predictorX[4*int(Fold_5)])

predictor X 是一个数组,其值类似于

[[0.1,0.4,0.6,0.2],[..]....]

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    在:

    a[0:6,10:]
    

    0:6 选择行,10: 选择列。如果a 不是 2d 或不够大,则会导致错误。

    np.concatenate(a[0:6],a[10:])
    

    问题在于参数的数量;它需要一个数组列表。第二个,如果被理解为axis,它应该是一个整数(因此你的错误)。

    np.concatenate([a[0:6],a[10:]])
    

    应该可以。

    另一种选择是使用列表索引

    a[0,1,2,3,4,5,10,11,...]]
    

    np.r_ 是一个方便的小工具,用于构建这样的列表:

    In [73]: np.r_[0:6, 10:15]
    Out[73]: array([ 0,  1,  2,  3,  4,  5, 10, 11, 12, 13, 14])
    

    实际上是np.concatenate([np.arange(0,6),np.arange(10,15)])

    不管是先索引后连接,还是先连接索引后索引。效率差不多。 np.delete 根据“删除”区域的大小和类型在多种方法中进行选择,包括这些方法。

    trainX 表达式中添加 [] 到连接调用应该可以工作。但是,predictorX[4*Fold_5] 可能是个问题。您是否缺少:(如 10:示例)?如果您只想要一个值,则需要将其转换为 1d,例如predictorX[[4*Fold_5]]

    Fold_5 = len(predictorX)//5   # integer division in py3
    trainX = np.concatenate([predictorX[:3*Fold_5], predictorX[4*Fold_5:]])
    

    【讨论】:

      【解决方案2】:

      这里有另外两种获取所需子数组的简短方法:

      np.delete(a, np.s_[6:10])
      

      np.r_[a[:6], a[10:]]
      

      【讨论】:

        【解决方案3】:

        np.concatenate 接受一个数组序列。试试

        np.concatenate([a[0:6],a[10:]])
        

        np.concatenate((a[0:6],a[10:]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-13
          • 1970-01-01
          • 2016-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多