Tej*_*jas 5 arrays indexing numpy python-3.x
示例代码:
import numpy as np
a = np.zeros((5,5))
a[[0,1]] = 1 #(list of indices)
print('results with list based indexing\n', a)
a = np.zeros((5,5))
a[(0,1)] = 1 #(tuple of indices)
print('results with tuple based indexing\n',a)
Run Code Online (Sandbox Code Playgroud)
结果:
results with list based indexing
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
results with tuple based indexing
[[ 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)
正如您必须注意到的,使用列表索引数组给出的结果与使用相同索引的元组的结果不同.我正在使用python3和numpy版本1.13.3
使用list和tuple索引numpy数组的根本区别是什么?
按设计。 Numpy 的 getitem 和 setitem 语法不是duck-type,因为不同的类型用于支持不同的特性。这只是一个普通的旧__setitem__:
a[(0,1)] = 1
Run Code Online (Sandbox Code Playgroud)
这和做一样a[0,1] = 1。在这两种情况下,ndarray 的 setitem 都接收两个参数:索引的元组(0, 1)和值1。
a[[0,1]] = 1
Run Code Online (Sandbox Code Playgroud)
这是广播的特例。它通常会被写入a[0:2] = 1,但您也可以对其他行进行切片/变异,例如a[[0,1,3]]。标量1在分配中的第 0 行和第 1 行的所有列中被“拉伸”。