programing

NumPy 다차원 배열의 ith 열에 액세스하려면 어떻게 해야 합니까?

procenter 2022. 10. 20. 21:43
반응형

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

진보를 보면이 나온다.

게게왜 요요? 큰 배열을 있다고 해 보세요.Aarr:

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

반응형