【Python】python [:,2][:,None]是什么意思

看别人代码看到的,原生的应该没有这种语法吧。
是numpy库里的吗?

回答

python 是支持多维切片语法的,只是python自身没有用到。平时,就看到numpy里用了。


[:,2]看切片原理:
【Python】python [:,2][:,None]是什么意思


[:,None]

None表示该不进行切片,而是将该整体作为数组元素处理。

所以,[:,None]的效果就是将二维数组按每行分割,最后形成一个三维数组

我来解释一下语法。[:,2] 这是下标操作,对应于特殊方法 __getitem__(self, xxx) 以及 __setiterm__(self, xxx, value),其中 xxx 就是 [] 里边的那个值。

那么,[:,2] 里边是个什么东西呢?我们看看:

>>> class T:

... def __getitem__(self, x):

... print(x)

...

>>> t = T()

>>> t[:,2]

(slice(None, None, None), 2)

首先呢,由 , 构造了一个两个元素的 tuple。前一个元素是 :,后一个是 2。而在下标操作中,: 是特殊的:它会构造一个 slice 对象。完整的语法是:start:stop:step,省略的部分取默认值 None。省略 step 时也可以省掉它前边的冒号。

详情可以查阅文档的 Language Reference 相关部分。

相对于一维数组而言,二维(多维)数组用的会更多。一般语法是arr_name[行操作, 列操作]
先随机产生一个3*4的数组。

arr = np.arange(12).reshape((3, 4)) 

out:

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

  • 取行数据

arr[i, :] #取第i行数据

arr[i:j, :] #取第i行到第j行的数据

  • 取列数据(注意数据格式)

arr[:,0] # 取第0列的数据,以行的形式返回的

out:

array([0, 4, 8])

arr[:,:1] # 取第0列的数据,以列的形式返回的

out:

array([[0],

[4],

[8]])

  • 取一个数据块

# 取第一维的索引1到索引2之间的元素,也就是第二行 

# 取第二维的索引1到索引3之间的元素,也就是第二列和第三列

arr[1:2, 1:3]

out:

array([[5, 6]])

# 取第一维的全部

# 按步长为2取第二维的索引0到末尾之间的元素,也就是第一列和第三列

arr[:, ::2]

out:

array([[ 0, 2],

[ 4, 6],

[ 8, 10]])

对列表进行切片,参见

Python https://docs.python.org/3/tut...
Numpy https://docs.scipy.org/doc/nu...

numpy里面的多维数组切片

以上是 【Python】python [:,2][:,None]是什么意思 的全部内容, 来源链接: utcz.com/a/79759.html

回到顶部