>백엔드 개발 >파이썬 튜토리얼 >NumPy 배열 모양(R, 1)과 (R,)의 차이점은 무엇입니까?

NumPy 배열 모양(R, 1)과 (R,)의 차이점은 무엇입니까?

DDD
DDD원래의
2024-12-07 10:06:16350검색

What's the Difference Between NumPy Array Shapes (R, 1) and (R,)?

NumPy 배열 모양(R, 1)과 (R,)의 차이점

NumPy에서 배열의 모양은 미묘하게 다를 수 있습니다. 예를 들어 (R, 1) 및 (R,). 이러한 모양은 비슷해 보이지만 해석하고 처리하는 방식에 근본적인 차이가 있습니다.

1. 배열 구조 이해

NumPy 배열은 데이터 버퍼와 뷰로 구성됩니다. 데이터 버퍼는 원시 데이터 요소를 저장하는 반면, 뷰는 데이터를 해석하는 방법을 설명합니다. 모양은 뷰의 일부이며 배열에 포함된 차원과 요소 수를 지정합니다.

모양 (R, 1) 및 (R,)

  • (R, 1): 이 모양은 R개의 행과 1개의 열으로 구성된 배열을 나타냅니다. 1차원 배열처럼 동작하지만 크기 1의 추가 차원이 있습니다.
  • (R,): 이 모양은 R 행만 있는 배열을 나타냅니다. 추가 차원 없이 진정한 1차원 배열처럼 동작합니다.

2. 다양한 모양이 필요한 이유

NumPy는 역사적인 이유로 두 가지 모양을 모두 지원하고 특정 작업에 유연성을 제공하기로 결정했습니다. 일부 작업에서는 특정 모양의 배열을 예상하거나 생성하므로 입력 모양에 따라 동작이 달라집니다.

3. 행렬 곱셈의 의미

귀하의 numpy.dot(M[:,0], numpy.ones((1, R))) 예에서는 모양이 문제를 일으킬 수 있습니다. M[:,0]의 모양은 (R,)인 반면 numpy.ones((1, R))의 모양은 (1, R)이므로 정렬 오류가 발생합니다. 이 문제를 해결하려면 M[:,0]을 (R, 1)로 명시적으로 변경하면 됩니다.

4. 모범 사례

(R, 1)과 (R,) 사이에 엄격한 우선순위는 없지만 일반적으로 배열이 논리적으로 1차원이지만 추가 작업이 필요한 경우 (R, 1)을 사용하는 것이 좋습니다. 특정 작업에 대한 차원입니다. 오류를 피하기 위해 사용하는 모든 함수에서 예상되는 모양을 알고 있어야 합니다.

대체 접근 방식

귀하의 예에서는 모양 변경을 피하기 위해 다음 대안을 고려할 수도 있습니다.

  • numpy.dot(M.T, numpy.ones((R, 1)))
  • M.sum(축=0).reshape((R, 1))

위 내용은 NumPy 배열 모양(R, 1)과 (R,)의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.