350

NumPyに 2 つの単純な 1 次元配列があります。numpy.concatenateを使用してそれらを連結できるはずです。しかし、以下のコードでこのエラーが発生します。

TypeError: Python スカラーに変換できるのは長さ 1 の配列のみです

コード

import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)

なんで?

4

6 に答える 6

470

行は次のようになります。

numpy.concatenate([a,b])

連結する配列は、個別の引数としてではなく、シーケンスとして渡す必要があります。

NumPy のドキュメントから:

numpy.concatenate((a1, a2, ...), axis=0)

一連の配列を結合します。

あなたbを軸パラメーターとして解釈しようとしていたため、スカラーに変換できないと不平を言いました。

于 2012-02-11T01:21:04.930 に答える
38

の最初のパラメータconcatenateは、それ自体が連結する一連の配列である必要があります。

numpy.concatenate((a,b)) # Note the extra parentheses.
于 2012-02-11T01:17:24.897 に答える
14

以下のコード例に示すように、"r_[...]" または "c_[...]" のいずれかである "concatenate" の短い形式を使用する別の方法 ( http://wiki.scipy.orgを参照)追加情報については/NumPy_for_Matlab_Users ):

%pylab
vector_a = r_[0.:10.] #short form of "arange"
vector_b = array([1,1,1,1])
vector_c = r_[vector_a,vector_b]
print vector_a
print vector_b
print vector_c, '\n\n'

a = ones((3,4))*4
print a, '\n'
c = array([1,1,1])
b = c_[a,c]
print b, '\n\n'

a = ones((4,3))*4
print a, '\n'
c = array([[1,1,1]])
b = r_[a,c]
print b

print type(vector_b)

結果は次のとおりです。

[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]
[1 1 1 1]
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.  1.  1.  1.  1.] 


[[ 4.  4.  4.  4.]
 [ 4.  4.  4.  4.]
 [ 4.  4.  4.  4.]] 

[[ 4.  4.  4.  4.  1.]
 [ 4.  4.  4.  4.  1.]
 [ 4.  4.  4.  4.  1.]] 


[[ 4.  4.  4.]
 [ 4.  4.  4.]
 [ 4.  4.  4.]
 [ 4.  4.  4.]] 

[[ 4.  4.  4.]
 [ 4.  4.  4.]
 [ 4.  4.  4.]
 [ 4.  4.  4.]
 [ 1.  1.  1.]]
于 2013-12-23T09:10:25.900 に答える
2

1D 配列を単純な要素にアンパックできるという事実を利用してnumpy.ravel()、 、を使用してこれを行うためのその他の方法を次に示します。numpy.array()

# we'll utilize the concept of unpacking
In [15]: (*a, *b)
Out[15]: (1, 2, 3, 5, 6)

# using `numpy.ravel()`
In [14]: np.ravel((*a, *b))
Out[14]: array([1, 2, 3, 5, 6])

# wrap the unpacked elements in `numpy.array()`
In [16]: np.array((*a, *b))
Out[16]: array([1, 2, 3, 5, 6])
于 2019-04-27T21:45:29.913 に答える