

今まで二つのデータを以下のようなコードで列方向に連結させていました．  
それぞれ行*列はdata1は2*32,data2は5*32,data3は8*32の形になっています．  
data1とdata2のみのときは以下でできました．(7*32の形になる)

[code]

    import numpy as np
    #index削除しているか確認
    data1 = np.loadtxt('210122-945and1200-del-stand-t-all.csv', delimiter = ",")
    data2 = np.loadtxt('210123-945and1200-del-stand-t-pre.csv', delimiter = ",")
    data = np.append(data1,data2,axis=0)
    print(data)
    
[/code]

今回3つ以上のデータを以下のようなコードで連結させるとaxis=0のところでエラーが引っ掛かりました．目指しているのは15*32の形です．

[code]

    import numpy as np
    #index削除しているか確認
    data1 = np.loadtxt('210122-945and1200-del-stand-t-all.csv', delimiter = ",")
    data2 = np.loadtxt('210123-945and1200-del-stand-t-pre.csv', delimiter = ",")
    data3 = np.loadtxt('210124-945and1200-del-stand-t-pre.csv', delimiter = ",")
    data = np.append(data1,data2,data3,axis=0)
    print(data)
    
[/code]

どうすればスムーズに行けるんでしょうか．そもそもappendを用いるのがだめなんですかね


CC BY-SA 4.0
2021-01-23T10:58:55.170
73524
2021-01-25T05:27:01.417
2021-01-25T05:27:01.417
49
42568
question
python python3 numpy
データの列方向への結合


こちらの記事が参考になるでしょう。  
[NumPy配列ndarrayを結合（concatenate, stack, blockなど）](https://note.nkmk.me/python-
numpy-concatenate-stack-block/)  
[How To Concatenate Arrays in NumPy?](https://cmdlinetips.com/2018/04/how-to-
concatenate-arrays-in-numpy/)

[numpy.append(arr, values,
axis=None)](https://numpy.org/doc/stable/reference/generated/numpy.append.html)
は2つしか配列を指定できないので、

> Parameters
>
>   * arr : array_like  
>  Values are appended to a copy of this array.
>   * values : array_like  
>  These values are appended to a copy of arr. It must be of the correct shape
> (the same shape as arr, excluding axis). If axis is not specified, values
> can be any shape and will be flattened before use.
>   * axis : int, optional  
>  The axis along which values are appended. If axis is not given, both arr
> and values are flattened before use.
>

それ以上を並列で連結するなら [numpy.concatenate((a1, a2, ...), axis=0,
out=None)](https://numpy.org/doc/stable/reference/generated/numpy.concatenate.html)
を使えば良いでしょう。(2つの時でも使えます)

> Parameters
>
>   * a1, a2, … : sequence of array_like  
>  The arrays must have the same shape, except in the dimension corresponding
> to axis (the first, by default).
>   * axis : int, optional  
>  The axis along which the arrays will be joined. If axis is None, arrays are
> flattened before use. Default is 0.
>   * out : ndarray, optional  
>  If provided, the destination to place the result. The shape must be
> correct, matching that of what concatenate would have returned if no out
> argument were specified.
>

質問のソースで言えば、以下の行を：

[code]

    data = np.append(data1,data2,data3,axis=0)
    
[/code]

こちらのようにリストやタプルで指定すれば出来るでしょう：

[code]

    data = np.concatenate([data1,data2,data3], axis=1)
    
[/code]

あるいは：

[code]

    data = np.concatenate((data1,data2,data3), axis=1)
    
[/code]

* * *

また
[numpy.hstack(tup)](https://numpy.org/doc/stable/reference/generated/numpy.hstack.html)
でも同様に出来て、こちらは`axis=`の指定が不要になります。

> Parameters
>
>   * tup : sequence of ndarrays  
>  The arrays must have the same shape along all but the second axis, except
> 1-D arrays which can be any length.
>

`concatenate`同様、以下になります：

[code]

    data = np.hstack([data1,data2,data3])
    
[/code]

あるいは：

[code]

    data = np.hstack((data1,data2,data3))
    
[/code]

* * *

ちなみに「列方向への結合」というのが誤解で、実は「行方向への結合」であるならば、`concatenate`の`axis=1`パラメータは`axis=0`にするかデフォルトと同じなので不要になり、あるいは`hstack`ではなく
[numpy.vstack(tup)](https://numpy.org/doc/stable/reference/generated/numpy.vstack.html)
を使用することになるでしょう。


CC BY-SA 4.0
2021-01-23T14:26:45.890
73531
2021-01-24T00:32:08.587
2021-01-24T00:32:08.587
26370
26370
73524
answer