これをすべて入れたいように思われるのでnumpy
、質問に対する直接の答えは実際には脇に置いてあり、正しい答えは「もちろん…」の段落までありません。
あなたがそれについて考えるならば、Pythonには。がないので、あなたは最初のパラメータをとして使用map
しています。ただし、には1つあり、カスタムを指定できます。したがって、これをすべて1つのステップで実行できます。None
zip_longest
zip_longest
itertools
fillvalue
izip_longest
>>> import itertools
>>> todayorders = [1, 2]
>>> lastyearorders = [1, 2, 3]
>>> allorders = itertools.izip_longest(todayorders, lastyearorders, fillvalue=0)
>>> list(allorders)
[(1, 1), (2, 2), (0, 3)]
これは、短いリストの追加の値として表示されるを入力0
するだけです。すべてをNone
に置き換えたい場合は、MartijnPietersの方法で行う必要があります。しかし、私はこれがあなたが望むものだと思います。 None
0
list(allorders)
また、最後に:izip_longest
は、のほとんどのものと同様にitertools
、ではなくイテレータを返すことに注意してくださいlist
。または、よく知っているかもしれませんが、「厳密な」シーケンスではなく「怠惰な」シーケンスを返します。結果を繰り返すだけの場合は、実際にはそれが優れていますが、list
(人間が読める形式で印刷する、またはallorders[9]
例のようににアクセスするなど)を必要とする関数で使用する必要がある場合は、最初に明示的に変換する必要があります。
numpy.array
ではなく実際に必要な場合は、最初list
に通過することなく、直接そこに到達できます。list
(これから行うのがそれだけの場合はmatplotlib
、おそらく必要ですarray
。)最も明確な方法は、np.fromiter(allorders)
の代わりに使用することですlist(allorders)
。dtype=int
明示的(または適切なもの)を渡すことをお勧めします。また、サイズがわかっている場合(これはそうですmax(len(todayorders), len(lastyearorders))
)、場合によっては、明示的なものを渡す方が高速または簡単count
です。
もちろん、何かがnumpy
魅力的に聞こえる場合は、またはnumpy
を使用するのではなく、そもそもその範囲内にとどまる必要があります。map
izip_longest
>>> todayorders.resize(lastyearorders.shape)
>>> allorders = np.vstack(todayorders, lastyearorders).transpose()
残念ながら、それは変化todayorders
します。私が知る限り、同等の不変関数numpy.resize
は「ゼロ拡張」する方法を提供しませんが、代わりに値を繰り返します。うまくいけば、私は間違っていて、誰かが簡単な方法を提案するでしょうが、そうでなければ、あなたはそれを明示的にしなければなりません:
>>> extrazeros = np.zeros(len(lastyearorders) - len(todayorders), dtype=int)
>>> allorders = np.vstack(np.concatenate((todayorders, extrazeros)), lastyearorders)
>>> allorders = allorders.transpose()
array([[ 1, 1],
[ 2, 2],
[ 0, 3]])
もちろん、それをたくさん行う場合は、zeroextend
配列のペアを取り、一方を他方に一致するように拡張する関数を作成します(または、1Dだけを扱っているのではない場合は、各軸の短い方の配列をに拡張します他を作る)。
map
いずれにせよ、、などを使用するよりも高速で一時メモリの使用量が少ないことを除けば、これは、 (ではなく)izip_longest
右の最終配列になることも意味します。つまり、結果の長期メモリの使用量も少なくなります。 、そしてそれ以降に行うことはすべて高速になり、一時メモリの使用量も少なくなります。dtype
int
object
完全を期すために:ハンドル値を持つことは可能ですが、それはあなたが望むものではないと思います。たとえば、メソッドがに変換されるオブジェクトを渡すことができます。しかし、これは事実上Martijn Pietersの答えと同じですが、はるかに冗長であり、そのような配列を大量にプロットする必要がない限り、まったく利点はありません。pyplot
None
Transform
transform
None
0