54116


リストをndarray形式に変換したいです。  
下記にコードを載せています。

`a1_ndarray = np.array((a1,b))`ではエラーが出ませんが、`a2_ndarray =
np.array((a2,b))`ではエラーが表示されます。  
`ValueError: setting an array element with a sequence.`

調べたところ変換元のリストが多次元のarrayに変換出来ない形であったり、要素数が異なるといった記事が出てくるのですが、ピンときておらず理解できません。  
要素数が異なるといった場合には、それぞれの要素を確認したところエラーの起こった場合は一致しており、逆にエラーの起こらなかった場合に一致していません。

これらを理解するためには、どのような視点が抜け落ちていますでしょうか？  
ご教授いただけますと幸いです

[code]

    import numpy as np 
    import sys
    
    print(sys.version) #3.6.7
    
    a1 = [(3,4)]
    a2 = [3,4]
    b = [[2,5],[6,8]]
    print(len(a1)) # 1
    print(len(a2)) # 2
    print(len(b)) # 2
    a1_ndarray = np.array((a1,b))
    a2_ndarray = np.array((a2,b))
    
[/code]


CC BY-SA 4.0
2019-04-12T04:38:55.210
54110
2019-04-12T06:29:38.990
32862
question
python numpy
np.ndarrayに変換できる条件がわかりません


1次元と2次元の配列(リスト)を合体させているので、どのようにつなげればいいのかわからないといった状態です。条件としては、同じ次元のデータにする必要があります。

また、a1_ndaarayの中身を見たところ、[list([(3, 4)]) list([[2, 5], [6,
8]])]となっていたので、配列の中にリストがある状態です。ですので、厳密には2次元の配列ではないように思われます。

一番簡単な合体はそのまま`a2_ndarray=a2+b`とするだけですが、構造を保ったままのリストとなります。

他には`np.append(a2,b)`を使うと合体させられますが、中身を全部一緒にしてしまうので1次元の配列としてまとめられてしまいます。

そのままの構造を保持したままがいいのであれば、

[code]

    import pandas as pd
    
    df = pd.DataFrame(a2+b) 
    
[/code]

とすることもできます。この場合、DataFrame型にはなってしまいますが、Numpyとの相性はいいのでお勧めはします。

以上参考になれば幸いです。


CC BY-SA 4.0
2019-04-12T06:00:20.237
54116
2019-04-12T06:29:38.990
2019-04-12T06:29:38.990
30590
30590
54110
answer