English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
python에서 잘라내는 것은 요소를 주어진 인덱스에서 다른 인덱스까지 가져오는 것입니다。
이렇게 잘라내기를 인덱스 대신 전달합니다:[start:end]。
위와 같이 단계를 정의할 수 있습니다:[start:end:step]。
start를 전달하지 않으면 0으로 간주됩니다。
end를 전달하지 않으면 해당 차원 내 배열의 길이로 간주됩니다。
step을 전달하지 않으면 1。
다음에 구체적인 작업 예제를 보겠습니다
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5]) # 인덱스 잘라내기 1 到索引 5 요소 [2 3 4 5] >>> print(arr[4:]) # 배열에서 인덱스 잘라내기 4 끝까지의 요소 [5 6 7] >>> print(arr[:4]) # 시작부터 인덱스까지 잘라내기 4(제외함)의 요소 [1 2 3 4]
使用减号运算符从末尾开始引用索引:
从末尾开始的索引 3 到末尾开始的索引 1,对数组进行裁切:
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[-3:-1]) [5 6]
使用 step 值确定裁切的步长
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5:2]) # 从索引 1 到索引 5,返回相隔的元素 [2 4] >>> print(arr[::2])# 返回数组中相隔的元素 [1 3 5 7]
从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片:
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] >>> print(arr[1, 1:4]) # 从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片 [7 8 9] >>> print(arr[0:2, 2]) # 从两个元素中返回索引 2 [3 8] >>> print(arr[0:2, 1:4]) # 从两个元素裁切索引 1 到索引 4(不包括),这将返回一个 2-D 数组 [[2 3 4] [7 8 9]]
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。
以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。
>>> import numpy as np >>> x = np.array([1, 2], [3, 4], [5, 6]] >>> y = x[[1,2], [1,0]] >>> print(y) [1 4 5]
以下实例获取了 4X3 数组中的四个角的元素。行索引是 [3,3]],而列索引是 [2]],而列索引是 [2]]。
>>> import numpy as np >>> x = np.array([ 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]] >>> print(x) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> rows = np.array([3,3]] >>> cols = np.array([2],[0,2]] >>> y = x[rows,cols] >>> print(y) [[ 0 2] [ 9 11]]
返回的结果是包含每个角元素的 ndarray 对象。
可以借助切片 : 或 … 与索引数组组合。如下面实例:
>>> import numpy as np >>> a = np.array([1,2,3], [4,5,6],[7,8,9]] >>> b = a[1:3, 1:3] >>> c = a[1:3,1,2]] >>> d = a[...1:] >>> print(b) [[5 6] [8 9]] >>> print(c) [[5 6] [8 9]] >>> print(d) [[2 3] [5 6] [8 9]]
我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
以下实例获取大于 5 的元素:
>>> import numpy as np >>> x = np.array([ 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]] >>> print(x) [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> print(x[x > 5]) # 지금 우리는 큰 5 요소 [ 6 7 8 9 10 11]
다음 예제는 ~(부정 연산자)를 사용하여 NaN을 필터링하는 방법을 보여줍니다.
>>> import numpy as np >>> a = np.array([np.nan, 1,2,np.nan,3,4,5]) >>> print (a[~np.isnan(a)]) [ 1. 2. 3. 4. 5j])
다음 예제는 배열에서 비복수 요소를 필터링하는 방법을 보여줍니다.
>>> import numpy as np >>> a = np.array([1, 2+6j, 5, 3.5+5j]) >>> print (a[np.iscomplex(a)]) [2.0+6.j 3.5+5.j]
플래시 인덱싱은 정수 배열을 사용하여 인덱싱하는 것을 의미합니다.
플래시 인덱싱은 인덱스 배열의 값을 목표 배열의 특정 축의 인덱스로 사용하여 값을 가져옵니다. 일维 정수 배열을 인덱스로 사용할 때, 목표가 일维 배열이면, 인덱스 결과는 해당 위치의 요소입니다; 목표가 두维 배열이면, 해당 인덱스의 행입니다.
플래시 인덱싱은 슬라이싱과 다릅니다. 항상 새로운 배열에 데이터를 복사합니다.
>>> import numpy as np >>> x=np.arange(32).reshape((8,4)) >>> print (x[[4,2,1,7)] # 순서 인덱스 배열을 전달합니다. [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]] >>> print (x[[-4,-2,-1,-7)] # 역순 인덱스 배열을 전달합니다. [[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]] >>> print (x[np.ix_([1,5,7,2],[0,3,1,2)] # 여러 인덱스 배열을 전달합니다.(np.ix_를 사용해야 합니다) [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]