CC00030.python——|Hadoop&Python.v08|——|Arithmetic.v08|NumPy科学计算库:NumPy索引/切⽚/迭代|

一、索引、切⽚和迭代:基本索引和切⽚
### --- numpy中数组切⽚是原始数组的视图,这意味着数据不会被复制,视图上任何数据的修改都会反映到原数组上

arr = np.array([0,1,2,3,4,5,6,7,8,9])
arr[5]                                                      # 索引 输出 5
arr[5:8]                                                    # 切⽚输出:array([5, 6, 7])
arr[2::2]                                                   # 从索引2开始每两个中取⼀个 输出 array([2, 4, 6, 8])
arr[::3]                                                    # 不写索引默认从0开始,每3个中取⼀个 输出为 array([0, 3, 6, 9])
arr[1:7:2]                                                  # 从索引1开始到索引7结束,左闭右开,每2个数中取⼀个 输出 array([1, 3, 5])
arr[::-1]                                                   # 倒序 输出 array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
arr[::-2]                                                   # 倒序 每两个取⼀个 输出 array([9, 7, 5, 3, 1])
arr[5:8]=12                                                 # 切⽚赋值会赋值到每个元素上,与列表操作不同
temp = arr[5:8]
temp[1] = 1024
arr                                                         # 输出:array([ 0, 1, 2, 3, 4, 12, 1024, 12, 8, 9])
### --- 对于⼆维数组或者⾼维数组,我们可以按照之前的知识来索引,当然也可以传⼊⼀个以逗号隔开的索引列表来选区单个或多个元素

arr2d = np.array([[1,3,5],[2,4,6],[-2,-7,-9],[6,6,6]])      # ⼆维数组 shape(3,4)
arr2d[0,-1]                                                 #索引 等于arr2d[0][-1] 输出 5
arr2d[0,2]                                                  #索引 等于arr2d[0][2] == arr2d[0][-1] 输出 5
arr2d[:2,-2:]                                               #切⽚ 第⼀维和第⼆维都进⾏切⽚ 等于arr2d[:2][:,1:]
arr2d[:2,1:]                                                #切⽚ 1 == -2 ⼀个是正序,另个⼀是倒序,对应相同的位置
~~~ 输出:
#array([[3, 5],
# [4, 6]])
二、花式索引和索引技巧
### --- 整数数组进⾏索引即花式索引,其和切⽚不⼀样,它总是将数据复制到新数组中

import numpy as np
#⼀维
arr1 = np.array([1,2,3,4,5,6,7,8,9,10])
arr2 = arr1[[1,3,3,5,7,7,7]]                                # 输出 array([2, 4, 4, 6, 8, 8, 8])
arr2[-1] = 1024                                             # 修改值,不影响arr1
#⼆维
arr2d = np.array([[1,3,5,7,9],[2,4,6,8,10],[12,18,22,23,37],
[123,55,17,88,103]])                                        #shape(4,5)
arr2d[[1,3]]                                                # 获取第⼆⾏和第四⾏,索引从0开始的所以1对应第⼆⾏
~~~ 输出 array([[ 2, 4, 6, 8, 10],
#            [123, 55, 17, 88, 103]])
arr2d[([1,3],[2,4])]                                        # 相当于arr2d[1,2]获取⼀个元素,arr2d[3,4]获取另⼀个元素
~~~ 输出为 array([ 6, 103])
# 选择⼀个区域
arr2d[np.ix_([1,3,3,3],[2,4,4])]                            # 相当于 arr2d[[1,3,3,3]][:,[2,4,4]]
arr2d[[1,3,3,3]][:,[2,4,4]]
# ix_()函数可⽤于组合不同的向量
# 第⼀个列表存的是待提取元素的⾏标,第⼆个列表存的是待提取元素的列标
~~~ 输出为
# array([[ 6, 10, 10],
#       [ 17, 103, 103],
#       [ 17, 103, 103],
#       [ 17, 103, 103]])
### --- boolean值索引

names =
np.array(['softpo','Brandon','Will','Michael','Will','Ella','Daniel','softpo','Will','Brandon'])
cond1 = names == 'Will'
cond1
# 输出array([False, False, True, False, True, False, False, False, True,
False])
names[cond1] # array(['Will', 'Will', 'Will'], dtype='<U7')
arr = np.random.randint(0,100,size = (10,8))                # 0~100随机数
cond2 = arr > 90
# 找到所有⼤于90的索引,返回boolean类型的数组 shape(10,8),⼤于返回True,否则False
arr[cond2]                                                  # 返回数据全部是⼤于90的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值