2016-07-26 2 views
-1

오랫동안 array_like 목록을 배열로 변환하는 데 오랫동안 항상 np.array, np.asarraynp.asanyarray을 사용합니다.np.asarray (스칼라)의 출력은 무엇입니까?

그러나 스칼라를 수위가 낮은 배열로 변환 할 때 나는 array([123])이라는 올바른 것을 발생시키는 np.atleast_1d(123)을 알고 있습니다.

하지만이 np.array의 출력과 np.asarray

i = 123 
x = np.array(i, dtype=np.int) 
print x # array(123) 
print x.shape #() 
print x.size # 0 

x.shapex가 비어 있음을 나타냅니다 이후에 대한 혼란 스러워요, array(123)은 무엇인가? 0 차원 배열에 __str__에 여전히 123이 포함되어 있습니다.

size=0의 진정한 하늘의 배열은 그 크기가 모두 0 비록

print np.array([]).nbytes # 0 
print np.array(123).nbytes # 8 
print type(np.array(123)) # numpy.ndarray 

은 분명히 그들은 다른, array([])해야합니다.

+0

'x.shape'는 x **에 빈 모양이 있음을 나타냅니다 **. 'x'는 스칼라입니다. 또 뭐야? – Julien

+0

@JulienBernu,'print x'는'array ([]')가 아닌'array (123)'을 보여줍니다. 이것은 정규 빈 배열입니다. – Lee

+0

남자들은 downvoted, 적어도 코멘트를 남겨주세요. 그 질문은 분명하지 않거나 심지어 당신이 너무 간단하고 어리 석다 고 생각했습니다. 'x'는 스칼라가 아니고'numpy.ndarray'입니다. – Lee

답변

2

나는이 0d 케이스를 자연스러운 계속 nd으로 봅니다. MATLAB은 2d를 하한으로 만듭니다. numpy1d을 사용할 수 있었지만 대신 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_2dresult = 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)에 대한 유사성을 언급했습니다. 초보자 용 코드에서 본 적이 있지만 직접 필요하지는 않습니다.

관련 문제