热线电话:13121318867

登录
2018-11-13 阅读量: 759
数组怎么切片呀

切片符号用冒号(:) 表示。 NumPy 切片语法和 Python 列

表的标准切片语法相同。 为了获取数组 x 的一个切片, 可以用以下方

式:

x[start:stop:step]

如果以上 3 个参数都未指定, 那么它们会被分别设置默认值 start=0、

stop= 维度的大小(size of dimension) 和 step=1。

一维子数组

In[16]: x = np.arang
e(10)
x
Out[16]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In[17]: x[:5] # 前五个元素
Out[17]: array([0, 1, 2, 3, 4])
In[18]: x[5:] # 索引五之后的元素
Out[18]: array([5, 6, 7, 8, 9])
In[19]: x[4:7] # 中间的子数组
Out[19]: array([4, 5, 6])
In[20]: x[::2] # 每隔一个元素
Out[20]: array([0, 2, 4, 6, 8])
In[21]: x[1::2] # 每隔一个元素, 从索引1开始
Out[21]: array([1, 3, 5, 7, 9])

多维子数组

多维切片也采用同样的方式处理, 用冒号分隔。 例如:

In[24]: x2
Out[24]: array([[12, 5, 2, 4],
[ 7, 6, 8, 8],
[ 1, 6, 7, 7]])
In[25]: x2[:2, :3] # 两行, 三列
Out[25]: array([[12, 5, 2],
[ 7, 6, 8]])
In[26]: x2[:3, ::2] # 所有行, 每隔一列
Out[26]: array([[12, 2],
[ 7, 8],
[ 1, 7]])

子数组维度也可以同时被逆序:

In[27]: x2[::-1, ::-1]
Out[27]: array([[ 7, 7, 6, 1],
[ 8, 8, 6, 7],
[ 4, 2, 5, 12]])

获取数组的行和列

一种常见的需求是获取数组的单行和单列。 你可以将索引与切片组

合起来实现这个功能, 用一个冒号(:) 表示空切片:

In[28]: print(x2[:, 0]) # x2的第一列
[12 7 1]
In[29]: print(x2[0, :]) # x2的第一行
[12 5 2 4]

创建数组的副本

In[35]: x2_sub_copy = x2[:2, :2].copy()
print(x2_sub_copy)
[[99 5]
[ 7 6]]
如果修改这个子数组, 原始的数组不会被改变:
In[36]: x2_sub_copy[0, 0] = 42
print(x2_sub_copy)
[[42 5]
[ 7 6]]
In[37]: print(x2)
[[99 5 2 4]
[ 7 6 8 8]
[ 1 6 7 7]]
0.0000
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子