[python] 모든 True 또는 All False의 numpy 배열을 만드는 방법은 무엇입니까?

파이썬에서 모든 True 또는 All False로 채워진 임의의 모양의 numpy 배열을 어떻게 만듭니 까?



답변

numpy는 이미 모든 1 또는 0으로 구성된 배열을 매우 쉽게 만들 수 있습니다.

numpy.ones((2, 2))또는numpy.zeros((2, 2))

이후 TrueFalse파이썬으로 표현 1하고 0, 각각 우리가 선택하여 부울해야이 배열을 지정하기 만 dtype매개 변수를 우리가 수행됩니다.

numpy.ones((2, 2), dtype=bool)

보고:

array([[ True,  True],
       [ True,  True]], dtype=bool)

업데이트 : 2013 년 10 월 30 일

numpy 버전 1.8 이후 , fullfmonegaglia가 지적한 것처럼 의도를보다 명확하게 보여주는 구문으로 동일한 결과를 얻는 데 사용할 수 있습니다 .

numpy.full((2, 2), True, dtype=bool)

업데이트 : 2017 년 1 월 16 일

최소한 numpy 버전 1.12 이후 full자동으로 결과를 dtype두 번째 매개 변수 중 하나로 캐스팅하므로 다음 과 같이 쓸 수 있습니다.

numpy.full((2, 2), True)


답변

numpy.full((2,2), True, dtype=bool)


답변

oneszeros각각 1과 0으로 가득 찬 배열을 생성하는 선택적 dtype매개 변수를 사용합니다.

>>> numpy.ones((2, 2), dtype=bool)
array([[ True,  True],
       [ True,  True]], dtype=bool)
>>> numpy.zeros((2, 2), dtype=bool)
array([[False, False],
       [False, False]], dtype=bool)


답변

쓰기가 필요하지 않은 경우 다음을 사용하여 이러한 배열을 만들 수 있습니다 np.broadcast_to.

>>> import numpy as np
>>> np.broadcast_to(True, (2, 5))
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

쓰기 가능해야하는 경우 빈 배열과 fill직접 만들 수도 있습니다 .

>>> arr = np.empty((2, 5), dtype=bool)
>>> arr.fill(1)
>>> arr
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

이러한 접근법은 대체 제안 일뿐입니다. 일반적으로 np.full, np.zeros또는 np.ones다른 답변과 같이 제안해야합니다.


답변

np.fullnp.ones버전 사이에 차이가 있는지 확인하기 위해 시간을 빠르게 실행했습니다 .

답변 : 아니오

import timeit

n_array, n_test = 1000, 10000
setup = f"import numpy as np; n = {n_array};"

print(f"np.ones: {timeit.timeit('np.ones((n, n), dtype=bool)', number=n_test, setup=setup)}s")
print(f"np.full: {timeit.timeit('np.full((n, n), True)', number=n_test, setup=setup)}s")

결과:

np.ones: 0.38416870904620737s
np.full: 0.38430388597771525s

중대한

에 관한 게시물과 관련하여 np.empty(내 평판이 너무 낮아서 언급 할 수 없습니다) :

하지 마십시오. np.empty모든 True배열 을 초기화하는 데 사용하지 마십시오

배열이 비어 있으므로 메모리가 기록되지 않으며 값이 무엇인지 보장 할 수 없습니다. 예 :

>>> print(np.empty((4,4), dtype=bool))
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]]


답변

>>> a = numpy.full((2,4), True, dtype=bool)
>>> a[1][3]
True
>>> a
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)

numpy.full (크기, 스칼라 값, 유형). 전달할 수있는 다른 인수도 있습니다. 문서에 대해서는 https://docs.scipy.org/doc/numpy/reference/generated/numpy.full.html을 확인 하십시오.


답변

Michael Currie의 답변 벤치 마크

import perfplot

bench_x = perfplot.bench(
    n_range= range(1, 200),
    setup  = lambda n: (n, n),
    kernels= [
        lambda shape: np.ones(shape, dtype= bool),
        lambda shape: np.full(shape, True)
    ],
    labels = ['ones', 'full']
)

bench_x.show()

여기에 이미지 설명을 입력하십시오