首页 > 其他分享 >NumPy科学计算库学习_008_NumPy数组的花式索引和索引技巧

NumPy科学计算库学习_008_NumPy数组的花式索引和索引技巧

时间:2023-01-03 07:33:05浏览次数:40  
标签:blue color 索引 arr2d 209 bmatrix print 008 NumPy

1维NumPy数组

创建1维NumPy数组

arr = np.array([0,10,3,8,24,5,18,2,99,66])
print("【arr】\n",arr)
【arr】
 [ 0 10  3  8 24  5 18  2 99 66]

从1维NumPy数组中挑选元素索引、并赋值给新的对象

  • 将arr2内的元素修改不会影响到arr本身哦
arr2 = arr[[0,0,0,2,3,-1,-1]]
print("【arr2修改前】\n",arr2)
arr2[1] = 1024
print("【arr2修改后】\n",arr2)
print("【arr】\n",arr)
【arr2修改前】
 [ 0  0  0  3  8 66 66]
【arr2修改后】
 [   0 1024    0    3    8   66   66]
【arr】
 [ 0 10  3  8 24  5 18  2 99 66]

2维NumPy数组

生成一个2维NumPy数组

\[arr2d= \begin{bmatrix} 1&3&5&7&9\\ 2&4&6&8&10\\ 12&18&20&23&37\\ 123&55&32&11&209\\ \end{bmatrix}\]

arr2d = np.array([[1,3,5,7,9],[2,4,6,8,10],[12,18,20,23,37],[123,55,32,11,209]])
print("【arr2d】\n",arr2d)
【arr2d】
 [[  1   3   5   7   9]
 [  2   4   6   8  10]
 [ 12  18  20  23  37]
 [123  55  32  11 209]]

2维NumPy数组中,获取第2行第4行数据

\[arr2d= \begin{bmatrix} 1&3&5&7&9\\ \color{blue}{2}&\color{blue}{4}&\color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ 12&18&20&23&37\\ \color{blue}{123}&\color{blue}{55}&\color{blue}{32}&\color{blue}{11}&\color{blue}{209}\\ \end{bmatrix} \color{green}{\Longrightarrow} \begin{bmatrix} \color{blue}{2}&\color{blue}{4}&\color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ \color{blue}{123}&\color{blue}{55}&\color{blue}{32}&\color{blue}{11}&\color{blue}{209}\\ \end{bmatrix} \]

print("【获取第2行和第4行数据】\n",arr2d[[1,3]])
【获取第2行和第4行数据】
 [[  2   4   6   8  10]
 [123  55  32  11 209]]

2维NumPy数组中,获取第2行第3列第4行第5列的数据

\[arr2d= \begin{bmatrix} 1&3&5&7&9\\ {2}&{4}&\color{blue}{6}&{8}&{10}\\ 12&18&20&23&37\\ {123}&{55}&{32}&{11}&\color{blue}{209}\\ \end{bmatrix} \color{green}{\Longrightarrow} \begin{bmatrix} \color{blue}{6}&\color{blue}{209}\\ \end{bmatrix} \]

print("【获取第2行第3列和第4行第5列的数据】\n",arr2d[[1,3],[2,4]])
【获取第2行第3列和第4行第5列的数据】
 [  6 209]

2维NumPy数组中,获取第2行中:第3列、第4列、第5列的数据

\[arr2d= \begin{bmatrix} 1&3&5&7&9\\ {2}&{4}&\color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ 12&18&20&23&37\\ {123}&{55}&{32}&{11}&{209}\\ \end{bmatrix} \color{green}{\Longrightarrow} \begin{bmatrix} \color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ \end{bmatrix} \]

print("【获取第2行中:第3列、第4列、第5列的数据】\n",arr2d[1,[2,3,4]])
【获取第2行中:第3列、第4列、第5列的数据】
 [ 6  8 10]

2维NumPy数组中,获取第2行、第3列第2行、第4列第2行、第5列;第3行、第3列第2行、第4列第3行、第5列的数据

\[arr2d= \begin{bmatrix} 1&3&5&7&9\\ {2}&{4}&\color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ 12&18&\color{blue}{20}&\color{blue}{23}&\color{blue}{37}\\ {123}&{55}&{32}&{11}&{209}\\ \end{bmatrix} \color{green}{\Longrightarrow} \begin{bmatrix} \color{blue}{6}&\color{blue}{8}&\color{blue}{10}\\ \color{blue}{20}&\color{blue}{23}&\color{blue}{37}\\ \end{bmatrix} \]

print("【获取第2行、第3列;第2行、第4列;第2行、第5列;第3行、第3列;第2行、第4列;第3行、第5列的数据】\n",arr2d[[1,2],2:])
print("【获取第2行、第3列;第2行、第4列;第2行、第5列;第3行、第3列;第2行、第4列;第3行、第5列的数据】\n",arr2d[[1,2]][:,2:])
【获取第2行、第3列;第2行、第4列;第2行、第5列;第3行、第3列;第2行、第4列;第3行、第5列的数据】
 [[ 6  8 10]
 [20 23 37]]
【获取第2行、第3列;第2行、第4列;第2行、第5列;第3行、第3列;第2行、第4列;第3行、第5列的数据】
 [[ 6  8 10]
 [20 23 37]]

2维NumPy数组中,获取矩阵数组4个角的数据+第1行、第3列+第4行、第3列的数据

\[arr2d= \begin{bmatrix} \color{blue}1&3&\color{blue}5&7&\color{blue}9\\ {2}&{4}&{6}&{8}&{10}\\ 12&18&{20}&{23}&{37}\\ \color{blue}{123}&{55}&\color{blue}{32}&{11}&\color{blue}{209}\\ \end{bmatrix} \color{green}{\Longrightarrow} \begin{bmatrix} \color{blue}{1}&\color{blue}{5}&\color{blue}{9}\\ \color{blue}{123}&\color{blue}{32}&\color{blue}{209}\\ \end{bmatrix} \]

print("【获取`矩阵数组4个角的数据`+`第1行、第3列`+`第4行、第3列`的数据】\n",arr2d[[0,3]][:,[0,2,4]])
【获取`矩阵数组4个角的数据`+`第1行、第3列`+`第4行、第3列`的数据】
 [[  1   5   9]
 [123  32 209]]

关于笛卡尔积的计算

  • 计算过程

\[A= \begin{bmatrix} a&b\\ c&d\\ \end{bmatrix} B= \begin{bmatrix} 2\\ 3\\ \end{bmatrix} \]

\[\color{green}{\Downarrow} \]

\[{A}\otimes{B}= \begin{bmatrix} aB&bB\\ cB&dB\\ \end{bmatrix} = \begin{bmatrix} 2a&2b\\ 3a&3b\\ 2c&2d\\ 3c&3d\\ \end{bmatrix} \color{red}{\neq} {B}\otimes{A}= \begin{bmatrix} 2A\\ 3A\\ \end{bmatrix} = \begin{bmatrix} 2a&2b\\ 2c&2d\\ 3a&3b\\ 3c&3d\\ \end{bmatrix} \]

  • 笛卡尔积在NumPy中的使用np.ix_(待提取元素的行标, 待提取元素的列标)
print("【arr2d】")
print(arr2d)
print("【arr2d】选取行数")
print(arr2d[[1,3,3,3]])
print("【arr2d】在选取行数的基础上,选取列数")
print(arr2d[[1,3,3,3]][:,[2,4,4]])
print("【以上操作可以用np.ix_()代替】")
print(arr2d[np.ix_([1,3,3,3],[2,4,4])])
【arr2d】
[[  1   3   5   7   9]
 [  2   4   6   8  10]
 [ 12  18  20  23  37]
 [123  55  32  11 209]]
【arr2d】选取行数
[[  2   4   6   8  10]
 [123  55  32  11 209]
 [123  55  32  11 209]
 [123  55  32  11 209]]
【arr2d】在选取行数的基础上,选取列数
[[  6  10  10]
 [ 32 209 209]
 [ 32 209 209]
 [ 32 209 209]]
【以上操作可以用np.ix_()代替】
[[  6  10  10]
 [ 32 209 209]
 [ 32 209 209]
 [ 32 209 209]]

布尔值索引

chars = np.array(['a','b','c','d','e','f','g','h','a'])
print("【chars】\n",chars)
cond1 = (chars == 'a')
print("【cond1】\n",cond1)
print("【返回chars数组中,元素为a的字符】\n",chars[cond1])

print("")

nums = np.array([1,2,3,4,5,6,7])
print("【nums】\n",nums)
cond2 = (nums >= 4)
cond3 = (nums < 7)
print("【cond2 & cond3】\n",cond2 & cond3)
print("【返回nums数组中,元素大于等于4且小于7的数】\n",nums[cond2 & cond3])
【chars】
 ['a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'a']
【cond1】
 [ True False False False False False False False  True]
【返回chars数组中,元素为a的字符】
 ['a' 'a']

【nums】
 [1 2 3 4 5 6 7]
【cond2 & cond3】
 [False False False  True  True  True False]
【返回nums数组中,元素大于等于4且小于7的数】
 [4 5 6]

标签:blue,color,索引,arr2d,209,bmatrix,print,008,NumPy
From: https://www.cnblogs.com/cloucodeforfun/p/16684888.html

相关文章

  • NumPy科学计算库学习_005_关于NumPy数组的运算
    导入模块importnumpyasnp创建两个NumPy数组arr1=np.array([1,2,3,4,5])arr2=np.array([3,4,5,6,7])print("【arr1】\n",arr1)print("【arr2】\n",arr2)【a......
  • NumPy科学计算库学习_006_NumPy数组的复制和视图
    引入模块importnumpyasnp什么是浅拷贝?浅拷贝会在内存中产生不同对象,但由于拷贝的是父对象,子对象并没有拷贝,所以浅拷贝会存在共享内存的情况,实际上,NumPy的视图np_arr......
  • NumPy科学计算库学习_007_NumPy数组的基本索引和切片
    导入模块importnumpyasnp一维数组切片创建一个NumPy数组arr=np.array([0,1,2,3,4,5,6,7,8,9])print("【arr】\n",arr)【arr】[0123456789]从Num......
  • NumPy科学计算库学习_003_NumPy数组的IO操作
    导入模块importnumpyasnp生成一个数组arr_io_1=np.random.randint(0,10,(2,3))arr_io_2=np.random.randint(0,10,3)print("【arr_io_1】\n",arr_io_1)print(......
  • NumPy科学计算库学习_004_关于NumPy的数据类型
    NumPy的数据类型int类型:int8、int16、int32、int64float类型:float16、float32、float64str类型创建array时,指定数据类型np.array()importnumpyasnpnp.array(......
  • NumPy科学计算库学习_002_查看NumPy数组的信息
    引入模块importnumpyasnp添加NumPy库并生成一个NumPy数组arr=np.random.randint(0,100,size=(2,3,4))print("【arr】\n",arr)【arr】[[[12646556][21......
  • NumPy科学计算库学习_001_创建NumPy数组的各种方法
    引入模块importnumpyasnp创建元素全部是0/1的NumPy数组代码结构np.zeros(shape=n)np.ones(shape=n)案例zeros_np_arr_1_dim=np.zeros(shape=13)zeros_np_ar......
  • 关于搜索引擎及其开发
    托google、百度们成功的福,搜索引擎火了半边天。很多人都想跨到这个行业里边来。前两天在公司里边面试了一些人,基本上没有感到满意。不是说从业经验不够,有些也已经工作了三年......
  • 50.Oracle的索引
    Oracle的索引主要有三种索引:B树索引(B-Treeindex)位图索引(Bitmapindex)全文索引(Textindex)1.B树索引:Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索......
  • 1.2复习了一下MySQL的索引
    今天又复习了一下索引,做一个总结吧主要就是复习了索引分类概念,索引使用,SQL优化等三个方面1.主键索引,唯一索引,常规索引;对于唯一索引,同一个表中可以创建多个,用作创建唯一......