반응형
numpy.array에서 열을 삭제하는 방법
numpy.array에서 선택한 열을 삭제하고 싶습니다. 이것이 제가하는 것입니다:
n [397]: a = array([[ NaN, 2., 3., NaN],
.....: [ 1., 2., 3., 9]])
In [398]: print a
[[ NaN 2. 3. NaN]
[ 1. 2. 3. 9.]]
In [399]: z = any(isnan(a), axis=0)
In [400]: print z
[ True False False True]
In [401]: delete(a, z, axis = 1)
Out[401]:
array([[ 3., NaN],
[ 3., 9.]])
이 예에서 내 목표는 NaN을 포함하는 모든 열을 삭제하는 것입니다. 마지막 명령의 결과는 다음과 같습니다.
array([[2., 3.],
[2., 3.]])
어떻게 할 수 있습니까?
이름을 감안할 때 표준 방법은 다음 delete
과 같아야한다고 생각합니다 .
import numpy as np
A = np.delete(A, 1, 0) # delete second row of A
B = np.delete(B, 2, 0) # delete third row of B
C = np.delete(C, 1, 1) # delete second column of C
numpy의 문서 페이지 에 따르면에 대한 매개 변수 numpy.delete
는 다음과 같습니다.
numpy.delete(arr, obj, axis=None)
arr
입력 배열을 참조하고,obj
어떤 하위 배열 (예 : 열 / 행 번호 또는 배열의 슬라이스)을 나타냅니다.axis
열 단위 (axis = 1
) 또는 행 단위 (axis = 0
) 삭제 작업을 나타냅니다.
numpy 문서의 예 :
>>> a = numpy.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> numpy.delete(a, numpy.s_[1:3], axis=0) # remove rows 1 and 2
array([[ 0, 1, 2, 3],
[12, 13, 14, 15]])
>>> numpy.delete(a, numpy.s_[1:3], axis=1) # remove columns 1 and 2
array([[ 0, 3],
[ 4, 7],
[ 8, 11],
[12, 15]])
또 다른 방법은 마스크 배열을 사용하는 것입니다.
import numpy as np
a = np.array([[ np.nan, 2., 3., np.nan], [ 1., 2., 3., 9]])
print(a)
# [[ NaN 2. 3. NaN]
# [ 1. 2. 3. 9.]]
np.ma.masked_invalid 메소드는 nans 및 infs가 마스킹 된 마스킹 된 배열을 반환합니다.
print(np.ma.masked_invalid(a))
[[-- 2.0 3.0 --]
[1.0 2.0 3.0 9.0]]
np.ma.compress_cols 메서드는 마스킹 된 값이 포함 된 모든 열이 억제 된 2 차원 배열을 반환합니다.
a=np.ma.compress_cols(np.ma.masked_invalid(a))
print(a)
# [[ 2. 3.]
# [ 2. 3.]]
그러면 해당 열이없는 또 다른 배열이 생성됩니다.
b = a.compress(logical_not(z), axis=1)
에서 NumPy와 문서
np.delete (arr, obj, axis = None) 삭제 된 축을 따라 하위 배열이있는 새 배열을 반환합니다.
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> np.delete(arr, 1, 0)
array([[ 1, 2, 3, 4],
[ 9, 10, 11, 12]])
>>> np.delete(arr, np.s_[::2], 1)
array([[ 2, 4],
[ 6, 8],
[10, 12]])
>>> np.delete(arr, [1,3,5], None)
array([ 1, 3, 5, 7, 8, 9, 10, 11, 12])
상황에서 다음을 사용하여 원하는 데이터를 추출 할 수 있습니다.
a[:, -z]
"-z"는 부울 배열 "z"의 논리적 부정입니다. 이것은 다음과 같습니다.
a[:, logical_not(z)]
>>> A = array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
>>> A = A.transpose()
>>> A = A[1:].transpose()
NaN을 포함하는 Matrix 열 제거. 이것은 긴 답변이지만 이해하기 쉬울 것입니다.
def column_to_vector(matrix, i):
return [row[i] for row in matrix]
import numpy
def remove_NaN_columns(matrix):
import scipy
import math
from numpy import column_stack, vstack
columns = A.shape[1]
#print("columns", columns)
result = []
skip_column = True
for column in range(0, columns):
vector = column_to_vector(A, column)
skip_column = False
for value in vector:
# print(column, vector, value, math.isnan(value) )
if math.isnan(value):
skip_column = True
if skip_column == False:
result.append(vector)
return column_stack(result)
### test it
A = vstack(([ float('NaN'), 2., 3., float('NaN')], [ 1., 2., 3., 9]))
print("A shape", A.shape, "\n", A)
B = remove_NaN_columns(A)
print("B shape", B.shape, "\n", B)
A shape (2, 4)
[[ nan 2. 3. nan]
[ 1. 2. 3. 9.]]
B shape (2, 2)
[[ 2. 3.]
[ 2. 3.]]
참조 URL : https://stackoverflow.com/questions/1642730/how-to-delete-columns-in-numpy-array
반응형
'programing' 카테고리의 다른 글
LIMIT가 적용되기 전에 결과 수를 얻는 가장 좋은 방법 (0) | 2020.12.15 |
---|---|
"친숙한 URL"은 무엇입니까? (0) | 2020.12.15 |
자바에서 개인 메서드 재정의 (0) | 2020.12.15 |
ASP.NET MVC 컨트롤러에 jQuery Ajax POSTing 배열 (0) | 2020.12.15 |
Javascript 배열의 값 테스트 (0) | 2020.12.15 |