栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

随笔记录——numpy1

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

随笔记录——numpy1

10、假设每个人名都和data数组中的一行相对应,并且我们想要选中所有’nana’对应的行。
names = np.array(['nana', 'zhengzheng', 'fangfang', 'zhengzheng', 'nana', 'dingding', 'huanhuan'])
data = np.random.rand(7, 5)
data
Out[83]: 
array([[0.36880059, 0.8395524 , 0.1620856 , 0.43745294, 0.60072609],
       [0.90758299, 0.85110065, 0.33240056, 0.12152409, 0.2311381 ],
       [0.68127254, 0.29100165, 0.24362704, 0.22374143, 0.78298262],
       [0.81500746, 0.33877205, 0.4698735 , 0.85866448, 0.2551259 ],
       [0.81626763, 0.75416682, 0.70522153, 0.00727943, 0.67708974],
       [0.67674142, 0.32260481, 0.98239335, 0.69060303, 0.24409228],
       [0.53585089, 0.20241624, 0.40155367, 0.00163832, 0.55407748]])

数组的比较操作(比如==)也是可以向量化的。因此,比较names数组和字符串’nana’会产生一个布尔值数组:

names == 'nana'
Out[84]: array([ True, False, False, False,  True, False, False])

在索引数组时可以传入布尔值数组:

data[names == 'nana']
Out[85]: 
array([[0.36880059, 0.8395524 , 0.1620856 , 0.43745294, 0.60072609],
       [0.81626763, 0.75416682, 0.70522153, 0.00727943, 0.67708974]])

注:当布尔值数组的长度不正确时,布尔值选择数据的方法并不会报错,因此我建议在使用该特性的时候要小心。

10.1、在选择行的同时索引列
data[names == 'nana', 3:]
Out[87]: 
array([[0.43745294, 0.60072609],
       [0.00727943, 0.67708974]])
10.2、条件取反

为了选择除了’nana’以外的其他数据,你可以使用!=或在条件表达式前使用~对条件取反:

names != 'nana'
Out[89]: array([False,  True,  True,  True, False,  True,  True])
data[~(names=='nana')]
Out[91]: 
array([[0.90758299, 0.85110065, 0.33240056, 0.12152409, 0.2311381 ],
       [0.68127254, 0.29100165, 0.24362704, 0.22374143, 0.78298262],
       [0.81500746, 0.33877205, 0.4698735 , 0.85866448, 0.2551259 ],
       [0.67674142, 0.32260481, 0.98239335, 0.69060303, 0.24409228],
       [0.53585089, 0.20241624, 0.40155367, 0.00163832, 0.55407748]])
10.3、多个条件过滤

当要选择三个名字中的两个时,可以对多个布尔值条件进行联合,需要使用数学操作符如&(and)和|(or):

mask = (names =='nana')|(names=='dingding')
mask
Out[93]: array([ True, False, False, False,  True,  True, False])
data[mask]
Out[94]: 
array([[0.36880059, 0.8395524 , 0.1620856 , 0.43745294, 0.60072609],
       [0.81626763, 0.75416682, 0.70522153, 0.00727943, 0.67708974],
       [0.67674142, 0.32260481, 0.98239335, 0.69060303, 0.24409228]])
10.4、对布尔值选择的数据赋值

使用布尔值索引选择数据时,总是生成数据的拷贝,所以如果想更新值,需要直接赋值:

un_data = data[~(names=='nana')]
un_data = 0
# 原来的数组值不会有任何变化
data
Out[101]: 
array([[0.36880059, 0.8395524 , 0.1620856 , 0.43745294, 0.60072609],
       [0.90758299, 0.85110065, 0.33240056, 0.12152409, 0.2311381 ],
       [0.68127254, 0.29100165, 0.24362704, 0.22374143, 0.78298262],
       [0.81500746, 0.33877205, 0.4698735 , 0.85866448, 0.2551259 ],
       [0.81626763, 0.75416682, 0.70522153, 0.00727943, 0.67708974],
       [0.67674142, 0.32260481, 0.98239335, 0.69060303, 0.24409228],
       [0.53585089, 0.20241624, 0.40155367, 0.00163832, 0.55407748]])
# 直接赋值才有效果
data[data < 0.1] = 0
data
Out[103]: 
array([[0.36880059, 0.8395524 , 0.1620856 , 0.43745294, 0.60072609],
       [0.90758299, 0.85110065, 0.33240056, 0.12152409, 0.2311381 ],
       [0.68127254, 0.29100165, 0.24362704, 0.22374143, 0.78298262],
       [0.81500746, 0.33877205, 0.4698735 , 0.85866448, 0.2551259 ],
       [0.81626763, 0.75416682, 0.70522153, 0.        , 0.67708974],
       [0.67674142, 0.32260481, 0.98239335, 0.69060303, 0.24409228],
       [0.53585089, 0.20241624, 0.40155367, 0.        , 0.55407748]])
11、通过索引获取特定顺序的子集
arr = np.empty((8, 4))
for i in range(8):
    arr[i] = i
arr
Out[106]: 
array([[0., 0., 0., 0.],
       [1., 1., 1., 1.],
       [2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [6., 6., 6., 6.],
       [7., 7., 7., 7.]])
arr[[2, 3, 1, 6]]
Out[107]: 
array([[2., 2., 2., 2.],
       [3., 3., 3., 3.],
       [1., 1., 1., 1.],
       [6., 6., 6., 6.]])
       
arr[[-4, -3, -1]]
Out[108]: 
array([[4., 4., 4., 4.],
       [5., 5., 5., 5.],
       [7., 7., 7., 7.]])
11.1、传递多个索引数组选定特定值

下面是选定(0, 2),(2, 0), (3, 4)位置的值并组成一维数组。

arr = np.arange(20).reshape((4, 5))

arr[[0, 2, 3 ], [2, 0 , 4]]
Out[110]: array([ 2, 10, 19])

arr
Out[111]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

下面是选择定(0,2,3)行的(2, 0,4)列数据

arr[[0, 2, 3 ]][:,[2, 0 , 4]]
Out[112]: 
array([[ 2,  0,  4],
       [12, 10, 14],
       [17, 15, 19]])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号