Numpy(算术/索引切片/布尔索引)

本文介绍了Numpy数组的索引和切片操作,包括一维和多维数组的示例。同时,讲解了整数数组索引和布尔索引的概念,展示如何通过布尔条件选取数组元素。还提到了神奇索引,即利用列表值作为索引获取特定元素的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组算术

说明:numpy的数组能够进行数学运算,加减乘除等与使用与python一致。

示例:

import numpy as np
#  +	-	*	/	#加减乘除
arr = np.array([[1,2,3],[4,5,6]])
print("arr+1:",arr+1)
print("arr-1:",arr-1)
print("arr*2:",arr*2)
print("arr/2:",arr/2)
print("arr*arr:",arr*arr)

结果:

arr+1[[2 3 4]
 [5 6 7]]
arr-1[[0 1 2]
 [3 4 5]]
arr*2[[ 2  4  6]
 [ 8 10 12]]
arr/2[[0.5 1.  1.5]
 [2.  2.5 3. ]]
arr*arr: [[ 1  4  9]
 [16 25 36]]
索引和切片

说明:用法与python的列表基本一致,索引长度为n,从0开始,n-1结束。

索引

一维数组
示例:

import numpy as np

arr = np.array([1,2,3,4,5])
print(arr[2])		#3
print(arr[1:2])		#2

多维数组
示例:

import numpy as np

arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1[1][1])	#2
arr2 = np.array([
    [[1,2,3],
    [4,5,6],
    [7,8,9]],
    [[10,11,12],
    [13,14,15]]
])
print(arr2[0][0][2])	#3
切片

一维数组:
与python数组一致,示例:

arr2 = np.array([1,2,3,4,5,6,7])
print(arr2[1:4])	#234

多维数组

维度为(3,3,3)示例:

import numpy as np

arr2 = np.array([
    [[1,2,3],
    [4,5,6],
    [7,8,9]],
    [[10,11,12],
    [13,14,15],
    [11,12,13]],
    [[14,15,16],
    [17,18,19],
    [20,21,22]]
])
print(arr2[1:2,0:1,0:1])	#[[[10]]]

说明:
arr2[1:2,0:1,0:1],第一个1:2切片是三个大数组的索引,这里的对应的列表是:

    [[10,11,12],
    [13,14,15],
    [11,12,13]],

第二个0:1是从这个列表中在进行索引,对应的列表是:

    [10,11,12],

第三个0:1是从列表中取值,这里取第一个值10,三次切片,所以打印的结果是[[[10]]]。

维度为(2,3,3,3)示例:

import numpy as np

arr2 = np.array([
    [[[1,2,3],
    [4,5,6],
    [7,8,9]],
    [[10,11,12],
    [13,14,15],
    [11,12,13]],
    [[14,15,16],
    [17,18,19],
    [20,21,22]]],
    [[[-1,-2,-3],
    [-4,-5,-6],
    [-7,-8,-9]],
    [[-10,-11,-12],
    [-13,-14,-15],
    [-11,-12,-13]],
    [[14,-15,-16],
    [-17,-18,-19],
    [-20,-21,-22]]]
])
print(arr2[1:2,2:3,1:2,2:3])

总结:
维度为(3,3,3)的数组切片时,arr = array[x:y,x:y,x:y]中,可以有三个切片索引,从最外层往内切。
维度为(2,3,3,3)的数组时,arr = array[x:y,x:y,x:y,x:y],有四层切片索引,以此类推,维度中有几个数就可以有几层切片,切片的值全放在一个列表中,用英文逗号分隔开。

整数数组索引
说明:给出“坐标”来获取目标元素
示例,获取(0,0)、(1,2)、(2,2)位置的元素

import numpy as np

arr = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
arrGet = arr[[0,1,2],[0,2,2]]
print(arrGet)	#169

布尔索引

说明:布尔索引通过布尔运算(如:比较运算符)来获取复合条件的数组,布尔数组可组合使用

示例一,根据布尔值选择部分列表:

import numpy as np
import random

letter = [True,False,False,True,False,False]
data = np.random.randn(6,6)
print(data)
print(data[letter])
结果:
data:
[[ 5.42184370e-01  4.68608934e-01  1.48410002e+00  1.34129050e+00
   1.01747322e+00  4.05037611e-04]
 [ 1.27425089e-01 -1.37241461e-01  9.99905106e-01  3.32867305e-01
  -5.74688332e-01 -2.41242021e-01]
 [-3.46236483e-01 -4.03468861e-01 -3.36213127e-01 -4.51944201e-01
   1.72372542e+00 -4.41497457e-01]
 [ 3.69163467e-01 -1.66264286e+00  1.69080517e-01 -1.79278959e+00
   1.92304799e+00  1.97561770e+00]
 [-8.61865039e-01  2.16902225e-01 -7.10846233e-01 -9.60861758e-01
   8.84544395e-01  1.34472787e+00]
 [ 3.67207156e-01  4.37854951e-01  1.81917362e+00 -2.98152164e-01
   7.33791701e-01  7.46377162e-01]]
 data[letter]:
 [ 5.42184370e-01  4.68608934e-01  1.48410002e+00  1.34129050e+00
   1.01747322e+00  4.05037611e-04]
 [-3.46236483e-01 -4.03468861e-01 -3.36213127e-01 -4.51944201e-01
   1.72372542e+00 -4.41497457e-01]

示例二,大于、小于、等于、大于等于等:

import numpy as np

arr = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])

print(arr[arr > 5])
print(arr[arr < 3])
print(arr[arr == 4])
print(arr[arr >= 7])

示例三,布尔运算组合用法(&是和,|是或):

import numpy as np

arr2 = np.array([
    [[1,2,3],
    [4,5,6],
    [7,8,9]],
    [[10,11,12],
    [13,14,15],
    [11,12,13]],
    [[14,15,16],
    [17,18,19],
    [20,21,22]]
])
print(arr2[ (arr2>10) & (arr2<20)])		#[11 12 13 14 15 11 12 13 14 15 16 17 18 19]
print(arr2[ (arr2<5) | (arr2>20)])		#[ 1  2  3  4 21 22]	

神奇索引
说明:用一个列表的各个值作为下标,进行数据索引。
示例:

import numpy as np

indexList = [6,1,3,0]
arr = np.arange(32).reshape((8,4))
print(arr[indexList])

说明:
arr生成一个维度为(8,4)的数组,使用indexList列表中的各个值去索引arr数组中对应的列表,以上为例,对索引为6,1,3,0的四个列表进行索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值