저는 약 2 개월 동안 Python으로 작업 해 왔기 때문에 잘 이해하고 있습니다.CSV 파일에서 행렬 만들기
제 목표는 CSV 데이터를 사용하여 매트릭스를 만든 다음 해당 CSV 파일의 세 번째 열에있는 데이터에서 매트릭스를 채우는 것입니다.
내가 지금까지이 코드를 내놓았다 :
import csv
import csv
def readcsv(csvfile_name):
with open(csvfile_name) as csvfile:
file=csv.reader(csvfile, delimiter=",")
#remove rubbish data in first few rows
skiprows = int(input('Number of rows to skip? '))
for i in range(skiprows):
_ = next(file)
#change strings into integers/floats
for z in file:
z[:2]=map(int, z[:2])
z[2:]=map(float, z[2:])
print(z[:2])
return
을 위의 코드와 함께 쓰레기 데이터를 제거한 후, CSV 파일의 데이터는 다음과 같습니다
Input:
1 1 51 9 3
1 2 39 4 4
1 3 40 3 9
1 4 60 2 .
1 5 80 2 .
2 1 40 6 .
2 2 28 4 .
2 3 40 2 .
2 4 39 3 .
3 1 10 . .
3 2 20 . .
3 3 30 . .
3 4 40 . .
. . . . .
출력은해야 모양은 다음과 같습니다.
1 2 3 4 . .
1 51 39 40 60
2 40 28 40 39
3 10 20 30 40
.
.
이 CSV 파일에는 약 1,000 개의 행과 열이 있습니다. CSV 파일의 처음 3 열만 관심이 있습니다. 따라서 첫 번째와 두 번째 열은 기본적으로 행렬에 대한 좌표와 유사하며 세 번째 열에 데이터로 행렬을 채 웁니다.
많은 시행 착오 끝에, 나는 멍청이가 행렬로가는 길임을 깨달았다. 이것은 내가 예를 들어 데이터로 지금까지 뭘하려 : 나를 행렬을 생성하기 위해 내 스크립트에 내 모든 데이터를 지정하는
left_column = [1, 2, 1, 2, 1, 2, 1, 2]
middle_column = [1, 1, 3, 3, 2, 2, 4, 4]
right_column = [1., 5., 3., 7., 2., 6., 4., 8.]
import numpy as np
m = np.zeros((max(left_column), max(middle_column)), dtype=np.float)
for x, y, z in zip(left_column, middle_column, right_column):
x -= 1 # Because the indicies are 1-based
y -= 1 # Need to be 0-based
m[x, y] = z
print(m)
#: array([[ 1., 2., 3., 4.],
#: [ 5., 6., 7., 8.]])
그러나, 그것은 비현실적이다. 생성기를 사용하여 CSV 파일에서 데이터를 가져 왔지만 제대로 작동하지 않았습니다.
나는 그것이 할 수있는만큼 많은 numpy를 배웠지 만, 내 데이터가 이미 매트릭스 형태로 있어야하는 것처럼 보입니다. 그렇지 않습니다.
마지막 두 열의 의미를 이해하지 못합니다. 처음 세 개는 분명합니다 ... (행, 열, 값) – Nikaidoh