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")
print(x[[1, 2,0]],end="\nx[[1, 2,0]]\n\n")
print(x[[0, 1, 2], [0, 1, 0]],end="\nx[[0, 1, 2], [0, 1, 0]]\n\n")
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")
print(x[[1,0],[0,0],[1,1]],end="\nx[[1,0],[0,0],[1,1]]\n\n")
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第五节
去重