目录

1、一维数组的切片和索引

2、二维数组的切片和索引

3、数组的复制

4、修改数组的维度

5、数组的拼接


1、一维数组的切片和索引

#导入numpy模块
import numpy as np
#创建一维数组
a = np.arange(10)
print(a)
#索引访问 索引从0开始 长度-1
print("索引0处的元素:", a[0])
print("索引5处的元素:", a[5])


#负索引访问 倒数第一个的索引为-1
print("访问最后一个元素:", a[-1])
print("访问倒数第三个元素:", a[-3])

#切片正向索引操作  [start:stop:step]
print(a[:]) #从开始到结尾
print(a[3:]) #从索引3开始到结尾
print(a[3:5]) #从索引3开始到索引4 [start,stop)结尾
print(a[1:7:2]) #从索引1开始到索引6,步长是2

#切片中负索引操作
print(a[::-1]) #方向获取
print(a[-5:-2]) #从索引-5到索引-3结尾

输出结果为

[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]
 [19 20 21 22 23 24]]
[[ 1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24]]
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
[[ 1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24]]
[[[ 1  2]
  [ 3  4]
  [ 5  6]]

 [[ 7  8]
  [ 9 10]
  [11 12]]

 [[13 14]
  [15 16]
  [17 18]]

 [[19 20]
  [21 22]
  [23 24]]]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]

Process finished with exit code 0

2、二维数组的切片和索引

#导入numpy模块
import numpy as np
#创建一维数组
a = np.arange(1,13)
print(a)
#对一维数组进行修改形状 (4,3)
a = a.reshape((4,3))
print(a)
#索引的使用
#获取第三行
print(a[2])
#获取第二行 第三列
print(a[1][2])

#切片的使用[行进行切片,列进行切片] [start:stop:step,start:stop:step]
#获取所有行所有列
print(a[:, :])
#获取所有行部分列  获取所有行第2列
print(a[:, 1])
#获取所有行部分列  获取所有行第1,2列
print(a[:, 0:2])

#获取部分行 所有列 获取奇数行所有列
print(a[::2, :])

#获取部分行 部分列 获取奇数行第1,2列
print(a[::2, 0:2])

#坐标获取 [行,列]
#获取第2行第3列
print(a[1][2])
print(a[1, 2])

#同时获取不同行不同列 获取第2行第3列 第3行第1列
print(a[1, 2], a[2][0])
print(np.array([a[1, 2], a[2][0]]))

#使用坐标
print(a[(1, 2), (2, 0)])


#负索引的使用
print("最后一行")
print(a[-1])
print("行倒序")
print(a[::-1])
print("行列倒序")
print(a[::-1, ::-1])

输出结果为

[ 1  2  3  4  5  6  7  8  9 10 11 12]
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[7 8 9]
6
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[ 2  5  8 11]
[[ 1  2]
 [ 4  5]
 [ 7  8]
 [10 11]]
[[1 2 3]
 [7 8 9]]
[[1 2]
 [7 8]]
6
6
6 7
[6 7]
[6 7]
最后一行
[10 11 12]
行倒序
[[10 11 12]
 [ 7  8  9]
 [ 4  5  6]
 [ 1  2  3]]
行列倒序
[[12 11 10]
 [ 9  8  7]
 [ 6  5  4]
 [ 3  2  1]]

3、数组的复制

#导入numpy模块
import numpy as np
#创建一个二维的数组
a = np.arange(1, 13).reshape((3, 4))
print(a)
#对a数组进行切边处理,获取第一二行,第一二列
sub_a = a[:2, :2]
print(sub_a)
#获取sub_a中第一行第一列的值进行修改
# sub_a[0][0] = 100
# print(sub_a)
# print(a)
#切片通过可以获取到新数组,即使赋值给新的变量,但还是原来数组的视图。
# #如果对切片数组中元素的值进行修改会影响原来数组

#可以使用numpy中的copy方法实现
sub_aa = np.copy(a[:2, :2])  #深拷贝
sub_aa[0, 0] = 200
print(sub_aa)
print(a)

输出结果为

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
[[1 2]
 [5 6]]
[[200   2]
 [  5   6]]
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

4、修改数组的维度

#导入numpy模块
import numpy as np
#通过reshape将一维数组修改为二、三维
#创建一个一维数组
a = np.arange(1, 25)
print(a)
#将一维修改为二维 (2,12) (3,8) (4,6)
b = a.reshape(4, 6)
print(b)
b = a.reshape((3, 8))
print(b)

#将一维修改为三维 (2,3,4)
c = a.reshape((2, 3, 4))
print(c)

#通过np.reshape()进行修改
d = np.reshape(a, (3, 8))#将一维修改为二维
print(d)
#将一维修改为三维
e = np.reshape(a, (4, 3, 2))
print(e)

#将对为数组修改为一维数组
# a = e.reshape(24)
a = e.reshape(-1)
print(a)


#通过 ravel、flatten函数将多维数组转化为一维数组
#ravel
a = e.ravel()
print(a)

#flatren
a = e.flatten()
print(a)

输出结果为

[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]
 [19 20 21 22 23 24]]
[[ 1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24]]
[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]
[[ 1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16]
 [17 18 19 20 21 22 23 24]]
[[[ 1  2]
  [ 3  4]
  [ 5  6]]

 [[ 7  8]
  [ 9 10]
  [11 12]]

 [[13 14]
  [15 16]
  [17 18]]

 [[19 20]
  [21 22]
  [23 24]]]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]

5、数组的拼接

#导入numpy模块
import numpy as np
#创建两个数组
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[11, 12, 13], [14, 15, 16]])
print(a)
print(b)
#使用hstack进行水平拼接
# c = np.hstack([a, b])
c = np.hstack((a, b))
print(c)

#使用vstack进垂直方向拼接
c = np.vstack((a, b))
print(c)

#concatenate的使用
print('axis=0 默认情况 垂直方向拼接 相当于vstack')
c1 = np.concatenate((a, b), axis=0)
c2 = np.concatenate((a, b))
print(c1)
print(c2)

#二维数组有两个轴 axis=0 axis=1
print("axis=1 水平方向拼接  相当于hstack")
c3 = np.concatenate((a, b), axis=1)
print(c3)

#三维数组有三个轴 axis=0 1 2
a = np.arange(1, 13).reshape(1, 2, 6)
print(a, a.shape)
b = np.arange(101, 113).reshape(1, 2, 6)
print(b, b.shape)
print('三维 axis=0')
c = np.concatenate((a, b), axis=0)
print(c, c.shape)

print('三维 axis=1')
c = np.concatenate((a, b), axis=1)
print(c, c.shape)

print('三维 axis=2')
c = np.concatenate((a, b), axis=2)
print(c, c.shape)

输出结果为

[[1 2 3]
 [4 5 6]]
[[11 12 13]
 [14 15 16]]
[[ 1  2  3 11 12 13]
 [ 4  5  6 14 15 16]]
[[ 1  2  3]
 [ 4  5  6]
 [11 12 13]
 [14 15 16]]
axis=0 默认情况 垂直方向拼接 相当于vstack
[[ 1  2  3]
 [ 4  5  6]
 [11 12 13]
 [14 15 16]]
[[ 1  2  3]
 [ 4  5  6]
 [11 12 13]
 [14 15 16]]
axis=1 水平方向拼接  相当于hstack
[[ 1  2  3 11 12 13]
 [ 4  5  6 14 15 16]]
[[[ 1  2  3  4  5  6]
  [ 7  8  9 10 11 12]]] (1, 2, 6)
[[[101 102 103 104 105 106]
  [107 108 109 110 111 112]]] (1, 2, 6)
三维 axis=0
[[[  1   2   3   4   5   6]
  [  7   8   9  10  11  12]]

 [[101 102 103 104 105 106]
  [107 108 109 110 111 112]]] (2, 2, 6)
三维 axis=1
[[[  1   2   3   4   5   6]
  [  7   8   9  10  11  12]
  [101 102 103 104 105 106]
  [107 108 109 110 111 112]]] (1, 4, 6)
三维 axis=2
[[[  1   2   3   4   5   6 101 102 103 104 105 106]
  [  7   8   9  10  11  12 107 108 109 110 111 112]]] (1, 2, 12)

本次分享中我个人感觉输出结果有点长,下次可能考虑只放代码块,你们可以根据我的代码块自己去尝试并输出结果,这样也能提高你们打代码的积极性,希望本次分享能帮助到你们,有什么意见你们也可以在评论区留言,我会观看的。