더 많은 데이터를 분석하고 해결하기 위해 매트릭스에 추가하려고합니다. 그러나 현재는 짐승 같은 연산을 수행하고 있기 때문에 분석에 다른 열을 추가하면 파이썬의 한계를 초과합니다. 콤비네이션을 통해 야만적 인 방법을 사용하는 것보다 비슷한 결과를 얻을 수있는 솔버 방법이 있습니까? sample.csv도 아래에 나열되어 있습니다. 어떤 조언을 주셔서 감사합니다.파이썬, 솔버 메소드 또는 현재 코드의 최적화?
import csv
import itertools as it
import numpy as np
C = 2618.08
B = 933.15
A = 932.37
adjust = 1
D = csv.reader(open('sample.csv'))
float_ABC = []
OUT = np.zeros((3, 9)) - 100
for row in D:
float_ABC.append([str(x) for x in row])
float_ABC = float_ABC.astype(np.float)
Alpha=float_ABC[:, [0,3,6,9,12,15]]
Beta=float_ABC[:, [2,5,8,11,14,17]]
Phi=float_ABC[:, [1,4,7,10,13,16]]
plines1 = it.product(Alpha[0],Alpha[1],Alpha[2],Alpha[3],
Alpha[4],Alpha[5],Alpha[6],Alpha[7],
Alpha[8])
plines2 = it.product(Beta[0],Beta[1],Beta[2],Beta[3],
Beta[4],Beta[5],Beta[6],Beta[7],
Beta[8])
plines3 = it.product(Phi[0],Phi[1],Phi[2],Phi[3],
Phi[4],Phi[5],Phi[6],Phi[7],
Phi[8])
for count in range(0,6**9):
sumA = next(plines1)
sumB = next(plines2)
sumC = next(plines3)
if (sum(sumC)+B)/(sum(sumA)+C) <= (B+adjust)/(C) and \
(sum(sumC)+B)/(sum(sumA)+C) >= (B+adjust-10)/(C) and \
(sum(sumB)+A)/(sum(sumA)+C) > (sum(OUT[2])+A)/(sum(OUT[0])+C):
print("#",count,"- new option found!")
OUT = np.vstack((sumA,sumC,sumB))
및 sample.csv :
13.4,-18.81,-24.75,5.82,-8.21,-10.8,0,0,0,3.3,1.56,2.05,-2.1,5.36,7.05,2.6,5.65,7.44
0,-11.01,-14.49,0,-4.87,-6.41,0,0,0,0.6,2.24,2.95,1,4,5.26,1.7,2.73,3.59
0,-40.74,-53.6,0,-17.86,-23.5,0,0,0,3.5,6.53,8.59,2.9,9.36,12.31,1.9,2.61,3.44
1000,-1000,-1000,0,0,0,20.76,21.78,15.66,18.48,23.44,16.96,27.72,26.46,19.92,32.28,29.58,23.08
1000,-1000,-1000,-2.28,-6.12,-4.16,-2.28,-2.53,-1.73,0,0,0,1.92,-1.85,-1.26,1.08,-1.27,-0.86
1000,-1000,-1000,0,0,0,6.78,7.38,5.07,6.66,8.93,6.14,8.46,8.41,5.78,9.42,10.37,7.14
1000,-1000,-1000,0,0,0,28.8,34.28,27.86,37.2,39.64,33.32,45.6,42.76,36.63,54,45.88,40.03
1000,-1000,-1000,0,-4.95,-3.36,0,0,0,1.8,0.59,0.4,1.2,1.85,1.27,3.72,0.17,0.11
1000,-1000,-1000,0,0,0,27.6,19.3,13.71,32.76,23.68,17.15,37.8,20.56,14.71,22.56,27.58,21.06
는 "이 파이썬의 한계를 초과하는"무엇을 의미합니까? 어떤 종류의 오류가 있습니까? 열거 (zip (plines1, plines2, plines3))에서'for count, (sumA, sumB, sumC)를 사용하는 것이 좋습니다 :'sum (sumA) + C' 등의 결과를 캐싱하는 것은 여러 번 다시 계산하기 때문에 가능합니다. 모든 반복. –
위의 코드는 위의 코드에서'AttributeError : 'list'객체가'float_ABC'가 목록이므로'float_ABC = float_ABC.astype (np.float)'줄에 'astype'속성이 없다고 기대할 것입니다 ... –
thanks 입력을위한 @ TadhgMcDonald-Jensen - 열거 형 (zip (plines1, plines2, plines3))에서 count, (sumA, sumB, sumC)에 대한 행 : '어떤 이유로 든 내 두뇌에 연결되지 않았고 그 내 분석의 다른 부분에서 - 그건 의미가 있습니다. float_ABC 라인에 관해서는, 그것은 엔트리의 일부를 문자열로 가져 왔기 때문에 모든 것을 float 객체로 변환합니다. 그래도 그 도움에 대해 매우 감사하게 생각합니다! –