[PYTHON] 어떻게 numpy 배열에 열을 추가하려면
PYTHON어떻게 numpy 배열에 열을 추가하려면
recfromcsv에서 만든 배열에 하나의 열을 추가하려고합니다. 이 경우 배열입니다 : [210,8] (rows, cols).
9 번째 열을 추가하고 싶습니다. 비어 있거나 0은 중요하지 않습니다.
from numpy import genfromtxt
from numpy import recfromcsv
import numpy as np
import time
if __name__ == '__main__':
print("testing")
my_data = recfromcsv('LIAB.ST.csv', delimiter='\t')
array_size = my_data.size
#my_data = np.append(my_data[:array_size],my_data[9:],0)
new_col = np.sum(x,1).reshape((x.shape[0],1))
np.append(x,new_col,1)
해결법
-
==============================
1.귀하의 문제는 np.append에서 열을 추가 할 것으로 예상한다는 것입니다. 그러나 열거 형 데이터가 저장되는 방식으로 인해 조인 된 배열의 복사본이 생성됩니다
귀하의 문제는 np.append에서 열을 추가 할 것으로 예상한다는 것입니다. 그러나 열거 형 데이터가 저장되는 방식으로 인해 조인 된 배열의 복사본이 생성됩니다
Returns ------- append : ndarray A copy of `arr` with `values` appended to `axis`. Note that `append` does not occur in-place: a new array is allocated and filled. If `axis` is None, `out` is a flattened array.
출력을 저장해야합니다. all_data = np.append (...) :
my_data = np.random.random((210,8)) #recfromcsv('LIAB.ST.csv', delimiter='\t') new_col = my_data.sum(1)[...,None] # None keeps (n, 1) shape new_col.shape #(210,1) all_data = np.append(my_data, new_col, 1) all_data.shape #(210,9)
다른 방법 :
all_data = np.hstack((my_data, new_col)) #or all_data = np.concatenate((my_data, new_col), 1)
이 세 함수 (np.vstack뿐만 아니라) 간의 유일한 차이점은 축이 지정되지 않은 경우의 기본 동작입니다.
귀하의 의견을 바탕으로 귀하의 예제 코드를 자세히 살펴보면서, 나는 지금 당신이하려고하는 것이 레코드 배열에 필드를 추가하는 것이라고 믿습니다. 구조화 된 배열을 반환하는 genfromtxt와, 미묘하게 다른 레코드 배열 (recarray)을 반환하는 recfromcsv를 모두 가져 왔습니다. recfromcsv를 사용 했으므로 my_data는 실제로는 재 배열입니다. 즉, recarrays는 레코드의 1 차 배열이므로 각 레코드는 주어진 dtype을 가진 튜플이므로 가장 가능성이 큰 my_data.shape = (210,)을 의미합니다.
그래서 이것을 시도 할 수 있습니다 :
import numpy as np from numpy.lib.recfunctions import append_fields x = np.random.random(10) y = np.random.random(10) z = np.random.random(10) data = np.array( list(zip(x,y,z)), dtype=[('x',float),('y',float),('z',float)]) data = np.recarray(data.shape, data.dtype, buf=data) data.shape #(10,) tot = data['x'] + data['y'] + data['z'] # sum(axis=1) won't work on recarray tot.shape #(10,) all_data = append_fields(data, 'total', tot, usemask=False) all_data #array([(0.4374783740738456 , 0.04307289878861764, 0.021176067323686598, 0.5017273401861498), # (0.07622262416466963, 0.3962146058689695 , 0.27912715826653534 , 0.7515643883001745), # (0.30878532523061153, 0.8553768789387086 , 0.9577415585116588 , 2.121903762680979 ), # (0.5288343561208022 , 0.17048864443625933, 0.07915689716226904 , 0.7784798977193306), # (0.8804269791375121 , 0.45517504750917714, 0.1601389248542675 , 1.4957409515009568), # (0.9556552723429782 , 0.8884504475901043 , 0.6412854758843308 , 2.4853911958174133), # (0.0227638618687922 , 0.9295332854783015 , 0.3234597575660103 , 1.275756904913104 ), # (0.684075052174589 , 0.6654774682866273 , 0.5246593820025259 , 1.8742119024637423), # (0.9841793718333871 , 0.5813955915551511 , 0.39577520705133684 , 1.961350170439875 ), # (0.9889343795296571 , 0.22830104497714432, 0.20011292764078448 , 1.4173483521475858)], # dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8'), ('total', '<f8')]) all_data.shape #(10,) all_data.dtype.names #('x', 'y', 'z', 'total')
-
==============================
2.배열이있는 경우 210 행 × 8 열의 배열이 있습니다.
배열이있는 경우 210 행 × 8 열의 배열이 있습니다.
a = numpy.empty([210,8])
9 번째 열의 0을 추가하려면 다음을 수행하십시오.
b = numpy.append(a,numpy.zeros([len(a),1]),1)
-
==============================
3.다음과 같이 매트릭스 배열에 1이라는 새로운 열을 추가합니다.
다음과 같이 매트릭스 배열에 1이라는 새로운 열을 추가합니다.
Z = append([[1 for _ in range(0,len(Z))]], Z.T,0).T
어쩌면 그렇게 효율적이지 않을까요?
from https://stackoverflow.com/questions/15815854/how-to-add-column-to-numpy-array by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] sqlalchemy flush () 및 삽입 된 ID를 얻으려면? (0) | 2018.10.22 |
---|---|
[PYTHON] matplotlib 색상 표로 seaborn color_palette (0) | 2018.10.22 |
[PYTHON] 언제 sqlalchemy back_populates를 사용해야합니까? (0) | 2018.10.22 |
[PYTHON] matplotlib plot_surface 명령의 Colorbar (0) | 2018.10.22 |
[PYTHON] 배열 블록 내에서 값의 합을 계산하는 방법 (0) | 2018.10.22 |