我正在尝试学习numpy数组切片。
但这是我似乎无法理解的语法。
什么是
a [:1]做。
我在python中运行它。
a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
a = a.reshape(2,2,2,2)
a[:1]
输出:
array([[[ 5, 6],
[ 7, 8]],
[[13, 14],
[15, 16]]])
有人可以向我解释切片及其工作原理。文档似乎没有回答这个问题。
另一个问题是有没有办法用
之类的东西生成数组np.array(1:16)或类似于python的地方
x = [x for x in range(16)]
答案 0 :(得分:8)
切片中的逗号用于分隔您可能拥有的各种尺寸。在您的第一个示例中,您正在将数据整形为具有4个长度,每个长度为2个。这可能有点难以可视化,因此如果您从2D结构开始,它可能更有意义:
>>> a = np.arange(16).reshape((4, 4))
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> a[0] # access the first "row" of data
array([0, 1, 2, 3])
>>> a[0, 2] # access the 3rd column (index 2) in the first row of the data
2
如果要使用切片访问多个值,可以使用冒号表示范围:
>>> a[:, 1] # get the entire 2nd (index 1) column
array([[1, 5, 9, 13]])
>>> a[1:3, -1] # get the second and third elements from the last column
array([ 7, 11])
>>> a[1:3, 1:3] # get the data in the second and third rows and columns
array([[ 5, 6],
[ 9, 10]])
您也可以采取措施:
>>> a[::2, ::2] # get every other element (column-wise and row-wise)
array([[ 0, 2],
[ 8, 10]])
希望有所帮助。一旦更有意义,您可以使用None
或np.newaxis
或使用...
省略号来查看添加维度等内容:
>>> a[:, None].shape
(4, 1, 4)
您可以在此处找到更多信息:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
答案 1 :(得分:3)
在我们进行中探索shape
和个别条目可能会付出代价。
让我们从
开始>>> a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
>>> a.shape
(16, )
这是一个长度为16的一维数组。
现在让我们试试
>>> a = a.reshape(2,2,2,2)
>>> a.shape
(2, 2, 2, 2)
这是一个有4个维度的多维数组。
让我们看看0,1元素:
>>> a[0, 1]
array([[5, 6],
[7, 8]])
由于剩下两个维度,因此它是一个二维矩阵。
现在a[:, 1]
说:a[i, 1
取i
的所有可能值:
>>> a[:, 1]
array([[[ 5, 6],
[ 7, 8]],
[[13, 14],
[15, 16]]])
它会为您提供一个数组,其中第一项为a[0, 1]
,第二项为a[1, 1]
。
答案 2 :(得分:2)
要回答问题的第二部分(生成连续值数组),您可以使用np.arange(start, stop, step)
或np.linspace(start, stop, num_elements)
。这两个都返回一个numpy数组,其中包含相应的值范围。