第八周——数据分析、可视化 Day2 8.16

学习时间:9:00——11:30       15:00——16:40

1. 切片和索引

—ndarray对象的内容可以通过索引或切片来访问和修改,与python中的list切片操作一样

—ndarray数组可以基于0—n的下标进行索引(索引+1 = 数的第几位)

2. 一维数组

冒号分隔切片参数:[start:stop:step]

冒号的解释:

—如果只放一个参数如[2]表示返回对应的单个元素

—如果为[2:]表示从该索引开始所有项均被提取

—如果为[:7]表示从起始项开始到该索引项均被提取

—如果使用两个参数如[2:7]那么提取两个索引之间的项但不包括停止索引(左闭右开)

—如果想将所有项取反,则将步长设为-1,及[ : : -1 ]

为什么切片和区间会忽略最后一个元素呢?
—当只有停止索引(第二个参数)时,我们可以快速看出切片中有几个元素

import numpy as np
a = np.array([1,3,5,7,9,11,13,15,17,19])
print(a[:4])

#[1 3 5 7]     #输出4个元素

—当起始索引和停止索引均可见时,可以快速计算出切片或区间的长度(stop-start即可)

import numpy as np
a = np.array([1,3,5,7,9,11,13,15,17,19])
print(a[1:4])

#[3 5 7]        #4-1=3,切片长度为3

—当我们想把一个序列分割成互不重复的两部分时,只要写成list [ : x ] 和 list [ x : ] 即可

import numpy as np
a = np.array([1,3,5,7,9,11,13,15,17,19])
print('a[:2]:',a[:2])
print('a[2:]:',a[2:])

#a[:2]: [1 3]
#a[2:]: [ 5  7  9 11 13 15 17 19]

多维数组

—每次索引切片得到下一维度的一个元素,如二维数组切片一次得到一维数组,以此类推

—切片还可以用省略号“...”,如果在行位置使用,那么返回值包括所有行元素,反之,包含所有列元素

import numpy as np
a = np.array([
    [0,1,2,3,4],
    [5,6,7,8,9],
    [10,11,12,13,14],
    [15,16,17,18,19]
])
print(a)
print(a[...,1])        #表示取第二列元素
print(a[...,1:])       #表示取除了第一列外的所有列元素
print(a[...][1])       #第一个省略号表示取所有行,也就是a本身,然后取的二行所有元素

#[[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]
# [15 16 17 18 19]]

#[ 1  6 11 16]

#[[ 1  2  3  4]
# [ 6  7  8  9]
# [11 12 13 14]
# [16 17 18 19]]

#[5 6 7 8 9]

索引高级操作1——整数数组索引

x = np.array([
    [1,2],
    [3,4],
    [5,6]
])
y = x[[0,1,2],[0,1,0]]      #[0,1,2]代表行索引,[0,1,0]代表列索引
print(y)                    #y分别取x中的(0,0)(1,1)(2,0)的数据,可以把二维数组当做坐标轴


#[1 4 5]

创建一个五子棋棋盘矩阵(黑块为0,白块为1)

z = np.zeros((8,8),dtype = int)
z[1::2,::2] = 1
z[::2,1::2] = 1
print(z)

#[[0 1 0 1 0 1 0 1]
# [1 0 1 0 1 0 1 0]
# [0 1 0 1 0 1 0 1]
# [1 0 1 0 1 0 1 0]
# [0 1 0 1 0 1 0 1]
# [1 0 1 0 1 0 1 0]
# [0 1 0 1 0 1 0 1]
# [1 0 1 0 1 0 1 0]]

索引高级操作2——布尔数组索引

当输出结果需要进行布尔运算(比如比较运算)时,会用到布尔数组索引

a = np.array([
    [0,1,2,3,4],
    [5,6,7,8,9],
    [10,11,12,13,14],
    [15,16,17,18,19]
])
print(a[a>10])                   #输出大于10的所有元素

#[11 12 13 14 15 16 17 18 19]
a = np.array([
    [0,1,2,3,4],
    [5,6,7,8,9],
    [10,11,12,13,14],
    [15,16,17,18,19]
])
print(a[a%2 == 1])                 #提取数组中所有的奇数
a[a%2 == 1]=-1                     #将奇数值修改为-1
print(a)

#[ 1  3  5  7  9 11 13 15 17 19]
#[[ 0 -1  2 -1  4]
# [-1  6 -1  8 -1]
# [10 -1 12 -1 14]
# [-1 16 -1 18 -1]]

—多个条件:&和   | 或

—True和False表示需要或不需要的数据

a = np.arange(12).reshape((3,4)) 
row = np.array([False,True,True])               
colum = np.array([True,False,True,False])

print(a)
print(a[row])                                #表示取第二行和第三行所有元素                                 
print(a[:,colum])                            #表示取第一列和第三列所有元素


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

#[[ 4  5  6  7]
# [ 8  9 10 11]]

#[[ 0  2]
# [ 4  6]
# [ 8 10]]

广播机制

如果两个数组的形状相同,那么相乘的结果是对应位相乘,这要求维数相同,各维的长度相同

广播是numpy对不同形状的数组进行数值计算的方式,对形状较小的数组在横向或纵向上进行一定次数的重复,使其与形状较大的数组具有相同的维度

—规则:将两个数组的维度大小右对齐,然后比较对于维度上的数值;如果数值相等或其中一个为1或为空,则能进行广播运算;输出的维度大小为较大的数值,否则不能进行数组运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值