NumPy 다차원 배열의 ith 열에 액세스하려면 어떻게 해야 합니까?
지정:
test = numpy.array([[1, 2], [3, 4], [5, 6]])
test[i]
ih 행을 지정합니다(예:[1, 2]
). ih 컬럼에 접속하려면 어떻게 해야 하나요?(예:[1, 3, 5]
또, 이 작업은 비용이 많이 드는 작업입니까?
열 0에 액세스하려면:
>>> test[:, 0]
array([1, 3, 5])
행 0에 액세스하려면:
>>> test[0, :]
array([1, 2])
이는 NumPy 참조 섹션 1.4(인덱싱)에서 다룹니다.적어도 내 경험상 이건 빠르네요.루프의 각 요소에 액세스하는 것보다 훨씬 빠릅니다.
>>> test[:,0]
array([1, 3, 5])
이 명령어는 행 벡터를 제공합니다.루프오버만 하고 싶다면 괜찮습니다만, 3xN 디멘션을 가지는 다른 어레이와 함께 스택 하는 경우는,
ValueError: all the input arrays must have same number of dimensions
하는 동안에
>>> test[:,[0]]
array([[1],
[3],
[5]])
는 연결 또는 hstack 작업을 수행할 수 있도록 열 벡터를 제공합니다.
예.
>>> np.hstack((test, test[:,[0]]))
array([[1, 2, 1],
[3, 4, 3],
[5, 6, 5]])
한 번에 여러 열에 액세스하려면 다음 작업을 수행할 수 있습니다.
>>> test = np.arange(9).reshape((3,3))
>>> test
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> test[:,[0,2]]
array([[0, 2],
[3, 5],
[6, 8]])
행을 치환하여 반환할 수도 있습니다.
In [4]: test.T[0]
Out[4]: array([1, 3, 5])
그 질문에 대한 답은 나왔지만, 몇 가지 뉘앙스를 말씀드리겠습니다.
배열의 첫 번째 열에 관심이 있다고 가정해 보겠습니다.
arr = numpy.array([[1, 2],
[3, 4],
[5, 6]])
알수 있듯이 행 '행 벡터 '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터', '행 벡터'의 형태로 표현합니다.(3,)
슬라이스를 사용합니다.
arr_col1_view = arr[:, 1] # creates a view of the 1st column of the arr
arr_col1_copy = arr[:, 1].copy() # creates a copy of the 1st column of the arr
어레이가 다른 어레이의 보기인지 복사본인지 확인하려면 다음을 수행합니다.
arr_col1_view.base is arr # True
arr_col1_copy.base is arr # False
ndarray.base 참조.
둘의 ) arr_col1_view
을 줄 수 있습니다.arr
스텝을
arr_col1_view.strides[0] # 8 bytes
arr_col1_copy.strides[0] # 4 bytes
게게왜 요요? 큰 배열을 있다고 해 보세요.A
arr
:
A = np.random.randint(2, size=(10000, 10000), dtype='int32')
A_col1_view = A[:, 1]
A_col1_copy = A[:, 1].copy()
첫 열의 A_col1_view.sum()
★★★★★★★★★★★★★★★★★」A_col1_copy.sum()
을 사용하는 빠릅니다 복사된 버전을 사용하는 것이 훨씬 빠릅니다.
%timeit A_col1_view.sum() # ~248 µs
%timeit A_col1_copy.sum() # ~12.8 µs
이는 앞에서 언급한 단계 수가 다르기 때문입니다.
A_col1_view.strides[0] # 40000 bytes
A_col1_copy.strides[0] # 4 bytes
하는 것이 더 , 하는 데 더 이, 에 약되었습니다).A_col1_copy
조작을 할가 있고 가 없다면 것이
열을 주로 사용하는 경우 어레이를 줄자('C') 순서(기본값)가 아닌 열자('F') 순서로 작성한 후 이전과 같이 슬라이싱을 수행하여 열을 복사하지 않고 가져오는 것이 좋습니다.
A = np.asfortranarray(A) # or np.array(A, order='F')
A_col1_view = A[:, 1]
A_col1_view.strides[0] # 4 bytes
%timeit A_col1_view.sum() # ~12.6 µs vs ~248 µs
이제 열 뷰에서 합계 연산(또는 기타)을 수행하는 것은 열 복사본에서 수행하는 것과 동일한 속도입니다.
마지막으로 어레이를 치환하고 행 슬라이싱을 사용하는 것은 원래 어레이에서 컬럼 슬라이싱을 사용하는 것과 같습니다.왜냐하면 원래 어레이의 모양과 진도를 바꾸기만 하면 되기 때문입니다.
A[:, 1].strides[0] # 40000 bytes
A.T[1, :].strides[0] # 40000 bytes
여러 개의 독립 열을 가져오려면 다음 작업을 수행합니다.
> test[:,[0,2]]
0과 2의 콜럼을 얻을 수 있습니다.
>>> test
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> ncol = test.shape[1]
>>> ncol
5L
그런 다음 두 번째 - 네 번째 열을 다음과 같이 선택할 수 있습니다.
>>> test[0:, 1:(ncol - 1)]
array([[1, 2, 3],
[6, 7, 8]])
이것은 다차원이 아닙니다.2차원 배열입니다.원하는 열에 액세스할 수 있습니다.
test = numpy.array([[1, 2], [3, 4], [5, 6]])
test[:, a:b] # you can provide index in place of a and b
언급URL : https://stackoverflow.com/questions/4455076/how-do-i-access-the-ith-column-of-a-numpy-multidimensional-array
'programing' 카테고리의 다른 글
JavaScript에서 임의의 영숫자 문자열? (0) | 2022.10.20 |
---|---|
MySQL 선택 / NULL 손실 시 그룹화 (0) | 2022.10.20 |
OkHttp 요청 대행 수신기에 헤더를 추가하는 방법 (0) | 2022.10.20 |
Vue를 사용하여 드롭다운을 채운 후 B 드롭다운에 구분선을 삽입하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
MariaDB에서 워드프레스를 설치하는 방법 (0) | 2022.10.20 |