如何利用 NumPy 进行索引和切片?
2020-12-16 16:56:24 +08:00
fanqieipnet
处理多维数组,如何利用 NumPy 进行索引和切片?今天番茄加速就来跟大家讲解下。
平时遇到关于 NumPy 的 bug,解决不了的,可以先去查看 API 的使用说明。
理解 NumPy 的向量化能力,这正是赋予它简洁的重要原因之一。使用 Python 原生 API 会经常写些 for,但是 NumPy 让它变得不再需要,NumPy 一切都是按照向量计算。如下计算小于 3 的元素置 0,否则置为 1:
# 使用 Python 原生
a = [10,4,-6,3,5,1]
# 小于 3 的元素置为 0,不小于 3 的元素置为 1
b = []
for i in a:
b.append(0 if i < 3 else 1)
print(b)
使用 NumPy 的 where 方法,语法更加简洁,看不到 for 语句,符合 Python 哲学:
# 使用 NumPy
na = np.array(a)
# 一行代码
b = np.where(na < 3, 0, 1)
print(b)
3. 处理多维数组,NumPy 的索引和切片更强大,如下 na < 3 得到布尔索引,一切都按照向量化操作:
na = np.array([10,4,-6,3,5,1])
na[na < 3]
# 结果如下:
# array([-6, 1])
# 创建二维数组
np.random.randint(1,10,size=(3,4))
c2 = np.random.randint(1,10,size=(3,4))
c2
array([[3, 2, 9, 9],
[9, 5, 2, 4],
[8, 1, 2, 4]])
# 更强大简洁的切片功能:
c2[:2,1:3]
array([[2, 9],
[5, 2]])
0 条回复
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/736082
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.