

numpyを使わずにコードが1行ぐらいで収まり速度も速い  
列の抽出をしたいと考えています。

と、言いますのも  
<https://x1.inkenkun.com/archives/861>  
こちらの記事など他にもかなり調べてみたのですが  
配列・要素の挿入・削除等の基本的な計算は  
numpyを使わない方が速度が速いようです。  
np.dot や np.exp(-x) の時はコードが見やすくて助かるのですが

numpyを使わずに列の抽出ができないとなれば  
for文で1つずつ要素を新しい配列に追加していくしかないのかなと  
考えています。

解決策でなくとも、みなさんなりのご意見がございましたら頂戴したいです。  
なにとぞ、よろしくお願い申し上げます。


CC BY-SA 3.0
2018-02-19T17:20:20.953
41850
2018-05-31T13:17:40.353
27460
question
python python3 numpy
numpyを使わずに多次元配列の列の抽出


numpyのndarrayを配列として使うのは一般的です。  
numpyを使わない場合、nested listで配列を表します。

Pythonの基本オブジェクトを処理する場合、cytoolzは早いと思います。  
例えば：

[code]

    import cytoolz
    a = [[1, 2, 3], 
         [4, 5, 6], 
         [7, 8, 9], 
         [11, 12, 13]]
    list(cytoolz.pluck(1, a))
    [2, 5, 8, 12]
    
    list(cytoolz.pluck([1, 2], a))
    [(2, 3), (5, 6), (8, 9), (12, 13)]
    
[/code]


CC BY-SA 3.0
2018-02-21T00:48:56.423
41878
2018-02-21T00:48:56.423
8488
41850
answer


jupyter notebook を使うとコードの実行時間を簡単に計ることができます。  
numpyの配列を使った方が遥かに速いです。

[code]

    n = 1000000
    
    %timeit xs = [i for i in range(n)]
    10 loops, best of 3: 70.3 ms per loop
    
    %timeit xs = [None] * n
    100 loops, best of 3: 3.49 ms per loop
    
    import numpy as np
    
    %timeit a = np.arange(n)
    1000 loops, best of 3: 1.08 ms per loop
    
    %timeit a = np.zeros(n)
    The slowest run took 5.87 times longer than the fastest. This could mean that an intermediate result is being cached.
    1000 loops, best of 3: 456 µs per loop
    
[/code]

jupyter notebookをインストールするのが面倒な場合は [Google
Colabotry](https://colab.research.google.com/) が、無料ですぐに使えます。


CC BY-SA 3.0
2018-05-01T00:04:21.477
43675
2018-05-01T00:04:21.477
15171
41850
answer