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])
print(n3[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])
print(n1[5:])
print(n1[:-1])
print(n1[::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])
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])
y = np.array([0, 1, 2])
print(s2[x, y])
输出
[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]