【问题标题】:Python subscript syntax clarificationPython下标语法说明
【发布时间】:2017-05-30 06:34:43
【问题描述】:

您能否澄清一下代码中[:, :5] 部分在以下代码段中的作用?

for i in range(5):
        weights = None
        test_inputs = testset[i][:, :5]
        test_inputs = test_inputs.astype(np.float32)
        test_answer = testset[i][:, :5]
        test_answer = code_answer(test_answer)

【问题讨论】:

  • 这不是普通的 Python 语法,而是 Numpy 语法。

标签: python arrays numpy syntax


【解决方案1】:

这在手册的numpy indexing guide 中有解释。这不是标准的 Python 语法。

如果你有一个数组aa[:] 在整个数组上返回一个视图(不是副本;分配给它会改变a); a[:5] 元素视图0, 1, ..., 4

numpy 允许使用a[i, j] 而非纯python 版本的a[i][j] 来索引更多维数组。

这应该涵盖你所有的情况。

【讨论】:

    【解决方案2】:

    这段代码可能使用了numpy 数组。

    Numpy 定义了更精细的数组切片,类似于 Matlab 风格。

    [:, :5] 表示从您的数组(可能是一个二维数组,从tester[i] 返回)获取所有行(由: 指定),然后从头开始获取列,但不包括第 5 列.

    切片表达式的每个部分都遵循常规的 Python 切片语法。

    [:, :5] 本身实际上是这样解释的 [(:, :5)],因为在 Python 中,没有括号的逗号分隔值被解释为一个元组。

    数组对象可以处理表示复杂切片模式的元组。

    这就是这个语法的简单含义。

    有关更多信息,您可能想访问 numpy 页面,您可以从 www.scipy.org 开始。

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,被引用的数组来自 numpy 包(查看它的主页page

      一个例子应该会有所帮助。首先创建一个类似于提供的代码正在操作的多维数组结构:

      from numpy import *
      a=arange(36).reshape(6,6)
      b=a.reshape(6,3,2).swapaxes(0,2)
      print b
      
      [[[0  6 12 18 24 30]
        [2  8 14 20 26 32]
        [4 10 16 22 28 34]]
       [[1  7 13 19 25 31]
        [3  9 15 21 27 33]
        [5 11 17 23 29 35]]]
      

      [:,:5] 语法是一种数组切片机制,可以剔除所有 超过第五个的组件数组条目:

      print b[1][:,:5]
      
      [[1  7 13 19 25]
       [3  9 15 21 27]
       [5 11 17 23 29]]
      

      【讨论】:

      • 你没有回答这个问题。仅显示输出并不能解释输出的含义或操作符的作用。
      猜你喜欢
      • 2018-01-02
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多