Python下标语法澄清

时间:2017-01-15 08:17:15

标签: python arrays numpy syntax

您能否澄清下面代码段中代码[:, :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)

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

此代码可能使用numpy数组。

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

[:, :5]表示从您的数组(可能是从tester[i]返回的2D数组)中取出所有行(由:指定),然后从一开始就采用列直至但不包括第5栏。

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

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

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

这就是这种语法的含义。

有关详细信息,您可以访问numpy页面,可以从www.scipy.org开始。

答案 2 :(得分:0)

正如其他人所提到的,被引用的数组来自于 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]]