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


답변:


283

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)


37
질문이 게시 된 순간에 자신의 질문에 답변 했습니까?
M4rtini

26
@ M4rtini SO를 사용하면 질문과 질문에 대한 답변을 동시에 게시 할 수 있습니다.
Mick MacCallum

1
dtype = int 초기화 배열은 배열 요소 선택에 사용할 수 없습니다.
Jichao

1
작동합니다. @Jichao 말한대로, 때문에 조심해야 a=np.ones((2,2))다음 a.dtype=bool일을하지 않습니다.
medley56

8
이제 유명한 meme : devhumor.com/media/…
WLGfx

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

12
+1 이것이 이것이 정답이라고 생각합니다. 배열을 부울로 캐스트하기 위해 숫자로 채우는 것보다 부울로 배열을 채우는 것이 더 자연스러운 것 같습니다.
Zelphir Kaltstahl

5
oneszeros답변 정수 배열을 구성하지 않습니다. 그들은 직접 bool 배열을 만듭니다.
user2357112는 16:01에 Monica

1
numpy.full((2,2), True)동등한?
Pavel

numpy 1.12 이상입니다. 이전 버전에도 적용되는지 기억이 나지 않습니다
fmonegaglia

가능하면 dtype이 데이터 자체와 별도로 저장됩니까? 나는 numpy가 (으)로 변환 int 1하기 위해 무거운 리프팅을하고 있다고 상상할 수 없습니다 bool True.
BallpointBen

30

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)

10

쓰기가 필요하지 않은 경우 다음을 사용하여 이러한 배열을 만들 수 있습니다 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다른 답변과 같이 제안해야합니다.


3

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]]


0

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()

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.