NumPy에 2 개의 간단한 1 차원 배열이 있습니다. numpy.concatenate 사용하여 연결할 수 있어야합니다 . 그러나 아래 코드 에서이 오류가 발생합니다.
TypeError : 길이 1 배열 만 파이썬 스칼라로 변환 할 수 있습니다
암호
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)
왜?
답변
줄은 다음과 같아야합니다.
numpy.concatenate([a,b])
연결하려는 배열은 별도의 인수가 아닌 시퀀스로 전달해야합니다.
로부터 NumPy와 문서 :
numpy.concatenate((a1, a2, ...), axis=0)
일련의 배열을 함께 결합하십시오.
b
축 매개 변수로 해석하려고 했기 때문에 스칼라로 변환 할 수 없다고 불평했습니다.
답변
1D 어레이를 연결하는 데는 몇 가지 가능성이 있습니다.
numpy.r_[a, a],
numpy.stack([a, a]).reshape(-1),
numpy.hstack([a, a]),
numpy.concatenate([a, a])
이러한 모든 옵션은 대형 어레이에서 동일하게 빠릅니다. 작은 것들의 concatenate
경우 약간의 가장자리가 있습니다.
import numpy
import perfplot
perfplot.show(
setup=lambda n: numpy.random.rand(n),
kernels=[
lambda a: numpy.r_[a, a],
lambda a: numpy.stack([a, a]).reshape(-1),
lambda a: numpy.hstack([a, a]),
lambda a: numpy.concatenate([a, a]),
],
labels=["r_", "stack+reshape", "hstack", "concatenate"],
n_range=[2 ** k for k in range(19)],
xlabel="len(a)",
)
답변
첫 번째 매개 변수 concatenate
는 연결 하는 일련의 배열 이어야합니다 .
numpy.concatenate((a,b)) # Note the extra parentheses.
답변
대안은 아래 예제 코드에서 볼 수 있듯이 “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.]]
답변
다음은 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])
답변
numpy 문서 에서 더 많은 사실 :
구문을 numpy.concatenate((a1, a2, ...), axis=0, out=None)
행 단위 연결의 경우 축 = 0 열 단위 연결의 경우 축 = 1
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
# Appending below last row
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
# Appending after last column
>>> np.concatenate((a, b.T), axis=1) # Notice the transpose
array([[1, 2, 5],
[3, 4, 6]])
# Flattening the final array
>>> np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])
나는 그것이 도움이되기를 바랍니다!