我的AI学习记录

numpy

数组的索引和切片

import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])

print("x = np.array([[1, 2], [3, 4], [5, 6]])",end="\n\n")
print(x[[1]],end="\nx[[1]]\n\n")
print(x[1],end="\nx[1]\n\n")

print(x[[1, 2]],end="\nx[[1, 2]]\n\n") # 等价于x[1]和x[2]组成的数组
print(x[[1, 2,0]],end="\nx[[1, 2,0]]\n\n") # 等价于x[1]和x[2]和x[0]组成的数组
print(x[[0, 1, 2], [0, 1, 0]],end="\nx[[0, 1, 2], [0, 1, 0]]\n\n") # 等价于x[0, 0]、x[1, 1]和x[2, 0]组成的数组
print(x[[True, False, True]],end="\nx[[True, False, True]]\n\n")
print(x < 4,end="\nx < 4\n\n")
print(x[x < 4],end="\nx[x < 4]\n\n")
print(x[np.array([[True, True], [True, False], [False,False]])],end="\nx[np.array([[True, True], [True, False], [False,False]])]\n\n")


x = np.array([[[1, 2], [3, 4]], [[5, 6],[8,9]]])
print(x[[1],[0]],end="\nx[[1],[0]]\n\n") # 等价于x[1,0]组成的数组
print(x[[1,0],[0,0],[1,1]],end="\nx[[1,0],[0,0],[1,1]]\n\n") # 等价于x[1, 0, 1]、x[0, 0, 1]组成的数组。其中像x[1, 0, 1]相当于降了三次维去取值,而结果是x[1, 0, 1]、x[0, 0, 1]组成的数组,所以升了一次维,总的来说是降了两次维,于是结果是一维即[6 2]
print(x[1],end="\nx[1]\n\n")

# -----------------------------
import numpy as np

a = np.arange(24).reshape((2,3,4))
print(a,end="\n----------\n")
print(a[:2],end="\n----------\n")
print(a[:2][:2, 2, 3],end="\n----------\n")
'''
理解(我用chatgpt阐述我的理解)
在 numpy 中,多个切片和索引操作可以通过链式操作进行组合。对于给定的多维数组,每个维度都可以使用切片或索引操作进行访问。

针对你的例子,a 是一个 2x3x4 的三维数组,共包含 24 个元素。首先进行切片操作 a[:2],得到一个新的 2x3x4 的三维数组,其中保留了原数组的前两个元素。接着在这个新数组上进行索引操作 a[:2][:2, 2, 3],表示取出第一维中的前两个元素,第二维中的第三个元素,第三维中的第四个元素。这里的 [:2] 是一个切片操作,用于对第一维进行切片,而 [:2, 2, 3] 是一个索引操作,用于对后面两维进行索引。

简单来说,a[:2][:2, 2, 3] 的操作可以分成两个步骤:

a[:2]:对第一维进行切片,得到一个 2x3x4 的新数组;
[:2, 2, 3]:对新数组的第一维取前两个元素,对第二维取第三个元素,对第三维取第四个元素,得到一个标量值。
需要注意的是,这种链式操作的执行顺序是从左往右。因此,a[:2][:2, 2, 3] 实际上相当于 (a[:2])[:2, 2, 3],先执行了切片操作,再对切片后的数组进行索引操作。
'''


# ---------------------------
c = np.arange(16).reshape((2,2,4))
print(c,end="\n----------\n")
print(c[[1,0,-1]],end="\n----------\n") # 花式索引
print(c[1,0,-1],end="\n----------\n") # 普通索引

'''
在 NumPy 中,可以通过以下方式区分花式索引和普通索引:

如果使用的是一个元素的索引或者切片索引,那么就是普通索引。
如果使用的是整数数组作为索引,那么就是花式索引。

又例如a = np.array([[1, 2], [3, 4], [5, 6]])
普通索引
print(a[0, 1])   # 输出 2
print(a[:, 0])   # 输出 [1, 3, 5]

花式索引
print(a[[0, 2]])         # 输出 [[1, 2], [5, 6]]
print(a[[0, 1], [1, 0]]) # 输出 [2, 3]

花式索引和普通索引最主要的不同在于:普通索引返回的是数组的一个子集,而花式索引返回的是新的数组,使用花式索引可以方便地从数组中选择出特定的元素
'''


课程对应内容

panda第三节

merge

panda第四节

drop往下到simple取样

panda第五节

去重

你可能感兴趣的:(AI)