ndarray에 각각 값을 넣어서 생성하는 것이 아닌 보다 쉽게 생성하는 방법이 있는데, 바로 arange, zeros, ones 입니다.
sequence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
zero_array = np.zeros((3, 2), dtype='int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)
one_array = np.ones((3, 2))
print(one_array)
print(one_array.dtype, one_array.shape)
[Output]
[0 1 2 3 4 5 6 7 8 9]
int64 (10,)
[[0 0]
[0 0]
[0 0]]
int32 (3, 2)
[[1. 1.]
[1. 1.]
[1. 1.]]
float64 (3, 2)
처음에 array를 생성할때 사용한 arange 메서드는 range()와 유사한 기능을 합니다.
zeros와 ones의 dtype 디폴트 데이터형은 float64입니다.
이번에 사용할 메서드는 reshape입니다.
array1 = np.arange(10)
print('array1:\n', array1)
array2 = array1.reshape(2, 5)
print('array2:\n', array2)
array3 = array2.reshape(5, 2)
print('array3:\n', array3)
[Output]
array1:
[0 1 2 3 4 5 6 7 8 9]
array2:
[[0 1 2 3 4]
[5 6 7 8 9]]
array3:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
reshape()에 행, 열 순서로 입력해서 reshape할 수 있으며, 당연히 데이터 갯수에 맞춰야합니다. 예를 들어 데이터의 갯수가 15개면 reshape(3, 5)는 가능하지만 reshape(4, 5)등은 불가능합니다.
array1 = np.arange(10)
print(array1)
array2 = array1.reshape(-1, 5)
print('array2 shape:', array2.shape)
array3 = array1.reshape(5, -1)
print('array3 shape:', array3.shape)
[Output]
[0 1 2 3 4 5 6 7 8 9]
array2 shape: (2, 5)
array3 shape: (5, 2)
-1의 의미는 자동으로 생성하라는 의미로, 행 또는 열을 5로 고정되어있을때 10개의 데이터가 호환될 수 있는 행 또는 열의 갯수는 2이므로 컴퓨터가 자동으로 계산해서 (2, 5) 또는 (5, 2)형태로 만들어낸 것을 알 수 있습니다.
Source: 파이썬 머신러닝 완벽 가이드 / 위키북스