NumPy学习(索引和切片,合并,分割,copy与deep copy)

 

NumPy学习(索引和切片,合并,分割,copy与deep copy)

目录

1
2
3
4
5
索引和切片
 
合并
 
分割<br><br>copy与deep copy

  

 

 

索引和切片

通过索引和切片可以访问以及修改数组元素的值

 

 

一维数组

 

程序示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
 
#索引与切片
array=np.arange(3,15)
print(array)
print(array[3])#数组下标为3的元素
print('\n')
print(array[1:3])#取从下标1到下标3,不包括下标3
print(array[1:-9])
print(array[-11:3])
print('\n')
print(array[:]) #全部元素
print(array[1:])#从下标为1的元素到最后一个元素
print(array[:7])#第一个元素到下标为7的元素,不包括下标为7的元素
print(array[::2])#间隔2

  

 

运行结果

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

 

 

花式索引

程序示例

1
2
3
4
5
6
7
8
import numpy as np<br>#指定索引位置
index=[1,5,-7]
array3=array[index]
print(array3)
#使用布尔数组来花式索引
mask=np.array([0,1,0,1,1,0,1,0,1,0,0,1],dtype=bool)
array4=array[mask]
print(array4)

  

 

运行结果

1
2
[4 8 8]
[ 4  6  7  9 11 14]

  

 

 

多维 数组

 

程序示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np<br>array2=np.arange(3,15).reshape(3,4)
print(array2)
print(array2[2])#获取数组的某行
print('\n')
print(array2[2][2])#获取数组的某个元素,指定行和列
print(array2[2,2])
print('\n')
print(array2[2,:])#获取数组的第三行
print(array2[:,2])#获取数组的第三列
print(array2[1:3,1])#获取数组第2和3行的第二列元素
print(array2[1,1:3])#获取数组的第2行的2和3列
print('--------------------------------------------------')
<br>#输出全部行,一行输出成一个列表
for row in array2:
    print(row)
print('\n')<br>#输出全部列,一列输出成一个列表,array2.T为转置
for column in array2.T:
    print(column)
print('\n')<br>#将数组展开为一个列表
print(array2.flatten())
print('\n')<br>#将数组展开为一个列表,其中array2.flat将数组变为迭代器,上面的flatten()方法则直接返回
for item in array2.flat:
    print(item)

  

 

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
[11 12 13 14]
 
 
13
13
 
 
[11 12 13 14]
[ 5  9 13]
[ 8 12]
[8 9]
--------------------------------------------------
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
 
 
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
 
 
[ 3  4  5  6  7  8  9 10 11 12 13 14]
 
 
3
4
5
6
7
8
9
10
11
12
13
14

  

 

1
花式索引<br>程序示例
1
import numpy as np<br># 多维数组花式索引,我们需要给定行和列的值<br>arr1=np.array([[4,5,7,9],[2,4,6,8],[7,3,1,7]])<br>print(arr1)<br>print('\n')<br>#返回一条次对角线上的3个值<br>print(arr1[(0,1,2),(1,2,3)])<br>print('\n')<br>#返回的最后2行的第1,2,3列<br>print(arr1[1:,[0,1,2]])<br>#使用mask进行索引<br>print('\n')<br>mask=np.array([1,0,1,1],dtype=bool)<br>arr2=arr1[2,mask]<br>print(arr2)

 

 

运行结果

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

  

 

 

 

合并

 

一维数组

程序示例

1
2
3
4
5
6
7
8
9
import numpy as np
array1=np.array([1,2,3])
array2=np.array([4,5,6])
array3=np.vstack((array1,array2)) #纵向合并
array4=np.hstack((array1,array2)) #横向合并
print(array3)
print(array1.shape)
print(array2.shape)
print(array3.shape)

 

运行结果

1
2
3
4
5
[[1 2 3]
 [4 5 6]]
(3,)
(3,)
(2, 3)

  

 

import numpy as np


# #将列表转为numpy的数组
array1=np.array([1,2,3]).reshape(3,1)
array2=np.array([4,5,6]).reshape(3,1)
array3=np.vstack((array1,array2)) #纵向合并
array4=np.hstack((array1,array2)) #横向合并

array5=np.concatenate((array1,array2))
print(array5)
print('\n')
#对多个数组进行合并,axis=0为纵向合并,反之为横向合并
array6=np.concatenate((array1,array2),axis=1)
print(array6)

  

 

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

  

 

 

 

分割

程序示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
 
 
 
arr1=np.arange(12).reshape(3,4)
print(arr1)
 
print('横向分割,对列进行分割,分割成2块')
print(np.split(arr1,2,axis=1))
print(np.hsplit(arr1,2))
 
print('纵向分割,对行进行分割,分割成3块')
print(np.split(arr1,3,axis=0))
print(np.vsplit(arr1,3))
 
print('不等量分割,(1为列,0为行)')
 
print(np.array_split(arr1,3,axis=1))

  

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
横向分割,对列进行分割,分割成2
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 23],
       [ 67],
       [10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 23],
       [ 67],
       [10, 11]])]
纵向分割,对行进行分割,分割成3
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 89, 10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 89, 10, 11]])]
不等量分割,(1为列,0为行)
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

 

 

 

 

copy与deep copy

 

与原数组共享数据的形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
 
 
arr=np.arange(4)
b=arr
c=arr
d=b
 
print(arr)
print(b)
print(c)
print(d)
 
print('修改arr[0]的值')
arr[0]=10
 
print(b is arr,b)
print(c is arr,c)
print(d is arr,d)

  

运行结果

1
2
3
4
5
6
7
8
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
修改arr[0]的值
True [10  1  2  3]
True [10  1  2  3]
True [10  1  2  3]

  

 

不与原数据共享数据的形式

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
 
 
arr=np.arange(4)
b=arr.copy()
print(arr)
print(b)
 
 
print('修改arr[0]的值')
arr[0]=10
print(arr)
print(b is arr,b)

  

 

 

运行结果

1
2
3
4
[0 1 2 3]
[0 1 2 3]
修改arr[0]的值
False [0 1 2 3]

  

总结:

如果你想把它们关联起来,就使用第一种方法

如果只是把一个数组的值给另一个数组,使用第二种方法

 

posted @   -零  阅读(1245)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示