すべてTrueまたはすべてFalseの派手な配列を作成する方法は?


回答:


281

numpyはすでにすべて1またはすべて0の配列の作成を非常に簡単に許可しています。

numpy.ones((2, 2))またはnumpy.zeros((2, 2))

以来TrueFalseとしてPythonで表現されている10、それぞれ、我々はオプションの使用ブール値である必要があり、この配列を指定するだけ持つdtypeパラメータを、私たちが行っています。

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

戻り値:

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

更新:2013年10月30日

numpy バージョン1.8以降full、構文を使用して同じ結果を達成するために使用できます(fmonegagliaが指摘するように)。

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

更新:2017年1月16日

少なくともnumpyのので、バージョン1.12full自動的に結果をキャストdtype我々だけ書くことができますので、二番目のパラメータの:

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


37
質問が投稿されたのと同じ時間に、あなた自身の質問に答えましたか?
M4rtini 2014年

26
@ M4rtini SOを使用すると、質問と質問への回答を同時に投稿できます。
Mick MacCallum 2014年

1
dtype = int初期化配列は、配列要素の選択には使用できません。
Jichao 2016年

1
これは機能します。ただし、@ Jichaoが言っているように、a=np.ones((2,2))後にa.dtype=boolは機能しないので注意してください。
medley56 2017年

8
今有名なミーム:devhumor.com/media/...
WLGfx

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

12
+1これは受け入れられる答えであると思います。配列をブール値でキャストするために数値で埋めるよりも、ブール値で配列を埋めるほうが自然なようです。
Zelphir Kaltstahl 2016

5
onesそしてzeros答えは整数の配列を構築しません。彼らはブールの配列を直接構築します。
user2357112は

1
あるnumpy.full((2,2), True)同等?
Pavel

それはnumpy 1.12+です。以前のバージョンにも当てはまるかどうか覚えていません
fmonegaglia '20 / 10/20

Surly dtypeは、可能であればデータ自体とは別に保存されますか?私がnumpyをに変換するint 1ために重い作業をすることを想像することはできませんbool True
BallpointBen

30

onesとはzeros、それぞれ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.zerosnp.ones、他の回答が示唆するように。


3

np.fullnp.onesバージョンに違いがあるかどうかを確認するために、timeitをすばやく実行しました。

回答:いいえ

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.emptyall- Truearrayの初期化には使用しないでください

配列が空であるため、メモリは書き込まれず、値がどのようになるかは保証されません。たとえば、

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

0
>>> 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を確認してください


6
まあ、もうnp.full 1年以上前に別の回答が使用されています!
MSeifert 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.