나는이 0d
케이스를 자연스러운 계속 nd
으로 봅니다. MATLAB은 2d를 하한으로 만듭니다. numpy
은 1d
을 사용할 수 있었지만 대신 0d
을 선택했을 수 있습니다.
배열은 값 바이트가 저장되어 있는지 여부, dtype (해당 바이트를 해석하는 방법) 및 shape
(더하기 strides
)의 데이터 버퍼로 구성됩니다. shape
은 튜플로 표시됩니다. 파이썬은 튜플에 0, 1, 2 또는 그 이상의 요소를 가질 수 있으므로 왜 모양을 바꾸면 같은 유연성을 가질 수 없습니까? 무엇 atleast_1d
에서
봐는 않습니다
res = []
for ary in arys:
ary = asanyarray(ary)
if len(ary.shape) == 0:
result = ary.reshape(1)
else:
result = ary
res.append(result)
if len(res) == 1:
return res[0]
else:
return res
그것은 입력 목록 (스칼라, 배열 등 목록)
In [374]: np.atleast_1d(np.array(1),np.array([1]),np.array([[1]]))
Out[374]: [array([1]), array([1]), array([[1]])]
그것은 (필요에 따라) 배열에 각각의 변환 작업 할 수 있습니다 후 희미한 것 (모양의 len)을 확인합니다. 0이면 (1,)로 바꿉니다. 이 모양은 데이터 버퍼를 변경하지 않습니다. atleast_2d
은 result = ary.reshape(1, 1)
입니다. 또한 ndmin
수
:
In [382]: np.array(1,ndmin=1)
Out[382]: array([1])
np.array(1)
는 np.int32(1)
같은 여러 가지 방법이다. 둘 다 ()
모양을 가지고 있으며 두 가지 방법 모두 sum()
과 같은 방법이 있습니다. 유일한 차이점은 인쇄 형식에 있습니다.
0d 배열을 의도적으로 만들 이유가 없습니다. 실제로 1 차원 배열을 원한다면 np.array([1])
을 작성하는 것이 쉽습니다. 그러나 일어난다면 어떻게 처리해야하는지 알아야합니다. 여기에는 .item()
을 사용하여 스칼라 값을 추출하고 [()]
을 사용하여 인덱싱하는 것이 포함됩니다.
scipy.io.loadmat
으로 MATLAB 파일을로드하는 것과 관련하여 자주 묻습니다. 일부 MATLAB
구조는 0d 객체 배열로 반환됩니다.
0d 배열에 대한 또 다른 생각은 명시 적으로 dtype
을 지정하지 않고도 배열 메서드 전체를 스칼라에 추가 (또는 유지)한다는 것입니다.
np.int32(1)
에 대한 유사성을 언급했습니다. 초보자 용 코드에서 본 적이 있지만 직접 필요하지는 않습니다.
'x.shape'는 x **에 빈 모양이 있음을 나타냅니다 **. 'x'는 스칼라입니다. 또 뭐야? – Julien
@JulienBernu,'print x'는'array ([]')가 아닌'array (123)'을 보여줍니다. 이것은 정규 빈 배열입니다. – Lee
남자들은 downvoted, 적어도 코멘트를 남겨주세요. 그 질문은 분명하지 않거나 심지어 당신이 너무 간단하고 어리 석다 고 생각했습니다. 'x'는 스칼라가 아니고'numpy.ndarray'입니다. – Lee