2013-11-27 4 views
0

아마도 다른 누군가가 이미이 질문을 던졌지 만 찾지 못했습니다. 질문은 두 개의 1D 배열에서 2D 배열에 값을 할당하는 방법입니다. 예를 들면 :두 개의 1 차원 배열에서 값을 2 차원 배열에 할당

import numpy as np 
#a is the 2D array. b is the 1D array and should be assigned 
#to second coordinate. In this exaple the first coordinate is 1. 
a=np.zeros((3,2)) 
b=np.asarray([1,2,3]) 
c=np.ones(3) 
a=np.vstack((c,b)).T 

출력 :

[[ 1. 1.] 
[ 1. 2.] 
[ 1. 3.]] 

내가 너무 순진하고 오전 방법을 알고,하지만 난이 일의 한 줄 방법이 있어야 확신합니다.

P. 내가 다루고있는 실제 경우, 이것은 배열의 하위 배열이므로 첫 번째 좌표를 처음부터 1로 설정할 수 없습니다. 전체 배열의 첫 번째 좌표는 다르지만 np.where을 적용한 후에는 일정 해집니다.

답변

2

2 줄은 어떨까요?

>>> c = np.ones((3, 2)) 
>>> c[:, 1] = [1, 2, 3] 

그리고 증거가 작동 :

>>> c 
array([[ 1., 1.], 
     [ 1., 2.], 
     [ 1., 3.]]) 

또는, 아마 당신은 np.column_stack을 원하는 :

>>> np.column_stack(([1.,1,1],[1,2,3])) 
array([[ 1., 1.], 
     [ 1., 2.], 
     [ 1., 3.]]) 
+0

감사합니다. 위로 투표하십시오, 그러나 요점은 나의 첫 번째 배열은 고정되어 있지만 모든 값에 대해서는 아닙니다. 그래서 실제 시나리오에서는 실제로 np.where를 사용하고 있으므로 첫 번째 값은 1입니다. 그렇지 않으면 첫 번째 벡터의 모든 코드가 '1'이 아닙니다. 일부는 '0'입니다. 하지만 고마워. – Cupitor

1

첫째, 절대적으로 원래 zeros 배열을 만들 이유가 없다는 것을 너는 a에 집착하고 결코 참조하지 말고, 동일한 이름을 가진 다른 배열.

둘째, b과 동일한 모양과 dtype을 가지지 만 모두 1과 동일한 배열을 만들려면 ones_like을 사용하십시오.

그래서 :

당신은 물론 당신이 대신 다음 트랜스 vstack에 필요로 hstack을 사용할 수있는 경우 대신 3 배열의 3 × 배열에 b을 확장 할 수 ...하지만 난 돈
b = np.array([1,2,3]) 
c = np.ones_like(b) 
d = np.vstack((c, b).T 

' t 그 어떤 단순한 생각 :

당신이 한 줄에 주장하는 경우
b = np.array([1,2,3]) 
b = np.expand_dims(b, 1) 
c = np.ones_like(b) 
d = np.hstack((c, b)) 
관련 문제