Python学习-Numpy数组的拼接、切片和索引计算

20 篇文章 6 订阅

Numpy数组的拼接、切片和索引计算

1、导入Numpy库

import numpy as np

2、数组对接、分割

a1 = np.array([[1, 2, 3, 4], [2, 3, 4, 5]])
a2 = np.array([[1, 2, 3, 6], [2, 3, 4, 7]])
b1 = np.vstack((a1, a2))  # 垂直对接
b2 = np.hstack((a1, a2))  # 水平对接
c1 = np.vsplit(b1, 2)  # 垂直分割(数组,分割数)
c2 = np.hsplit(b2, 2)  # 水平分割(数组,分割数)
print(b1)
print(b2)
print(c1[0])
print(c1[1])
print(c2[0])
print(c2[1])
输出
[[1 2 3 4]
 [2 3 4 5]
 [1 2 3 6]
 [2 3 4 7]]
[[1 2 3 4 1 2 3 6]
 [2 3 4 5 2 3 4 7]]
 [[1 2 3 4]
 [2 3 4 5]]
[[1 2 3 6]
 [2 3 4 7]]
[[1 2 3 4]
 [2 3 4 5]]
[[1 2 3 6]
 [2 3 4 7]]

3、 一、二、三维数组的索引、修改和切片

1)一、二维数组的索引、修改
n1 = np.arange(10)
print(n1[9])
print(n1[-1])  # 从右往左顺序
n1[0] = -1  # 修改
print(n1)
n2 = n1.reshape(2, 5)
print(n2[1, 0])
输出
9
9
[-1  1  2  3  4  5  6  7  8  9]
5
2)三维数组的索引、修改
n3 = np.arange(12).reshape(2, 2, 3)
print(n3)
print(n3[1, 0, 0])  # 下标1为第三维的第二行,中间0为第二维第一行,最右边0为第一维第一列
print(n3[1, 1, 2])  # 下标1为第三维的第二行,中间1为第二维第二行,最右边2为第一维第三列

# 索引省略法
print(n3[1, ...])
print(n3[..., 2])
输出
[[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]
6
11
[[ 6  7  8]
 [ 9 10 11]]
[[ 2  5]
 [ 8 11]]
3)一维数组切片
n1 = np.arange(10)
print(n1[0:4])  # 取数组下标0~3的元素
print(n1[5:])  # 取数组下标5到最后的元素
print(n1[:-1])  # 取一维数组所有下标的元素
print(n1[::2])  # 步长为2
输出
[0 1 2 3]
[5 6 7 8 9]
[0 1 2 3 4 5 6 7 8]
[0 2 4 6 8]
4)二维数组切片
s2 = np.arange(9).reshape(3, 3)
print(s2[0:2])  # 取第一、二行数据,等价于s2[:2]
print(s2[:, 2])  # 取第三列数据
print(s2[:, :2])  # 取所有行,前两列的数据
print(s2[1, 2:])  # 取第二行,第三列数据
输出
[[0 1 2]
 [3 4 5]]
[2 5 8]
[[0 1]
 [3 4]
 [6 7]]
[5]
5)三维数组切片
n3 = np.arange(12).reshape(2, 2, 3)
print(n3[1, 1, :])  # 获取第三维的第二行,第二维第二行,第一维的所有列的子数组
print(n3[0, :, :2])  # 获取第三维的第一行,第二维所有行,第一维的第一、二列的子数组
输出
[ 9 10 11]
[[0 1]
 [3 4]]
6)整体索引
n1 = np.arange(10)
f = np.array([0, 3, 5])  # 指定数组下标
print(n1[f])

s2 = np.arange(9).reshape(3, 3)
f = np.array([0, 1])  # 指定二维数组的行标
print(s2[f])
输出
[0 3 5]
[[0 1 2]
 [3 4 5]]
7)指定坐标索引
s2 = np.arange(9).reshape(3, 3)
x = np.array([0, 1, 2])  # 指定x坐标轴
y = np.array([0, 1, 2])  # 指定y坐标轴
print(s2[x, y])  # 元素对应坐标为[0, 0]、[1, 1]、[2, 2]
输出
[0 4 8]
7)布尔值索引
b = np.array([[True, False, False], [False, True, False], [False, False, True]])
print(s2[b])
b1 = np.array([True, False, False])
print(s2[b1])
输出
[0 4 8]
[[0 1 2]]
8)迭代
n1 = np.arange(3)
for i in n1:
    print(i)

s2 = np.arange(9).reshape(3, 3)
for i in s2:
    print(i)
输出
0
1
2
[0 1 2]
[3 4 5]
[6 7 8]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值