Menu
CoddyTech

索引和切片

本课属于 Coddy Machine Learning 学习旅程的“数据与图表”单元。第 8 课,共 60 课。

数组和列表一样,从 0 开始索引。五天的钢琴练习时间,单位为分钟:

practice = np.array([20, 0, 35, 15, 40])
print(practice[0])    # 第一个
print(practice[-1])   # 最后一个
print(practice[1:4])  # 位置 1 到 3

这会输出:

20
40
[ 0 35 15]

二维数组用一对方括号中的行和列来定位,行在前。stock 的每一行代表一家商店,每一列代表一种产品:

一个由 3 行 4 列数字组成的网格;第 1 行第 2 列中值为 4 的单元格颜色最深,第 3 列中的 6、3 和 8 都有底色

stock = np.array([[5, 8, 2, 6], [9, 1, 4, 3], [7, 0, 6, 8]])
print(stock[1, 2])  # 一个值
print(stock[0])     # 一整行
print(stock[:, 3])  # 一整列

这会输出:

4
[5 8 2 6]
[6 3 8]

在行的位置,冒号表示所有行,而像 0:2 这样的切片表示其中一些行。因此,data[:, column] 表示每个样本的一个特征。

challenge icon

挑战

简单

一家酒店的报告有误。bookings 中每行代表一周,每列代表一天,从周一到周日。程序会读取一个周数和一个天数,编号从 1 开始。

每行都有一个 bug。修复它们,使其符合标签的含义:

  • Week:整周
  • Weekend:最后两天,也就是一个切片
  • Day:每周的那一天
  • Booked:那一天的预订情况

第 3 周,第 5 天:

Week 3: [11 12 13 17 20 24 26]
Weekend: [24 26]
Day 5: [18 19 20 21]
Booked: 20

亲手试试

import numpy as np

# 一家小旅馆的客房预订数量:每周一行(第 1 周到第 4 周),
# 每天一列(第 1 天到第 7 天,周一到周日)
bookings = np.array([
    [12, 15, 14, 16, 18, 25, 27],
    [10, 13, 15, 14, 19, 26, 28],
    [11, 12, 13, 17, 20, 24, 26],
    [9, 14, 16, 15, 21, 27, 29],
])
week = int(input())
day = int(input())

# 报表打印的数字不对:请修正下面的代码
row = bookings[week]
print(f"Week {week}: {row}")
print(f"Weekend: {row[5:6]}")
print(f"Day {day}: {bookings[day - 1]}")
print(f"Booked: {bookings[day - 1, week - 1]}")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

数据与图表中的所有课

自己练习: Python 在线编译器