I이있다 4x10
( n
X m
CSV)에 데이터 매트릭스 :
1, 5, 19, 23, 7, 51, 18, 20, 35, 41
15, 34, 17, 8, 11, 93, 13, 46, 3, 10
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
10, 9, 8, 7, 6, 5, 4, 3, 2, 1
먼저 첫 번째 n/2
행 에서 가능한 모든 합계 목록을 얻으려고합니다 . 나머지 마지막 n/2
행으로도 똑같이합니다.
첫 번째 행의 가능한 모든 합계에서 다음을 의미합니다.
예 :
행 1 : 1, 2, 3
행 2 :3, 2, 1
가능한 모든 합계 목록 : 1 + [3, 2, 1]
; 2 + [3, 2, 1]
;3 + [3, 2, 1]
최종 목록 : [4, 3, 2, 5, 4, 3, 6, 5, 4]
(현재 중복을 제거하고 싶지 않습니다)
내 논리에는 다음 코드가 있습니다.
import csv
def loadCsv(filename):
lines = csv.reader(open(filename, "rb"))
dataset = list(lines)
for i in range(len(dataset)):
dataset[i] = [float(x) for x in dataset[i]]
return dataset
data = loadCsv('btest2.txt')
divider = len(data)/2
firstPossibleSumsList = []
secondPossibleSumsList = []
#Possible sum list for the first n/2 rows:
for i in range(len(data[0])):
for j in range(len(data[0])):
firstPossibleSumsList.append(data[0][i] + data[1][j])
#Possible sum list for the last n/2 rows:
for i in range(len(data[0])):
for j in range(len(data[0])):
secondPossibleSumsList.append(data[2][i] + data[3][j])
문제는 data[0][i]
, data[1][i]
등 을 사용하여 수동으로 행을 나눴다는 것 data[2][i]
입니다. 더 효율적이고 divider
변수 를 포함하여 하고 싶지만 방법을 알 수 없습니다. 내 코드에서는 integers에 의존 0, 1, 2, 3
하지만 행렬 차원에 관계없이 행렬 행을 반으로 나누고 싶었습니다.
한 가지 옵션은 벡터와 전치 벡터의 합으로 생각하는 것입니다. 그런 다음 할 수 있습니다.
import numpy as np
data = np.array(loadCsv('btest2.txt'))
firstPossibleSumsArray = (data[0,:,np.newaxis] + data[1]).flatten()
#output for first two columns:
array([ 15, 34, 17, 8, 11, 93, 13, 46, 3, 10, 75,
170, 85, 40, 55, 465, 65, 230, 15, 50, 285, 646,
323, 152, 209, 1767, 247, 874, 57, 190, 345, 782, 391,
184, 253, 2139, 299, 1058, 69, 230, 105, 238, 119, 56,
77, 651, 91, 322, 21, 70, 765, 1734, 867, 408, 561,
4743, 663, 2346, 153, 510, 270, 612, 306, 144, 198, 1674,
234, 828, 54, 180, 300, 680, 340, 160, 220, 1860, 260,
920, 60, 200, 525, 1190, 595, 280, 385, 3255, 455, 1610,
105, 350, 615, 1394, 697, 328, 451, 3813, 533, 1886, 123,
410])
마지막 평면화는 필요하지 않은 배열에서 10x10
배열 로 바꾸는 것입니다 100x1
.
배열 사용의 단점은 데이터 크기 조정 / 추가와 관련하여 유연하지 않다는 것입니다.
편집하다:전체 코드는 다음과 같을 수 있습니다.
div = int(data.shape[0])
row_len_squared = int(data.shape[1]**2)
firstPossibleSumsArray = np.empty( int((div*(div-1))/2 * row_len_squared), dtype=int )
idx = 0
for row in range(div):
for col in range(row+1,div):
firstPossibleSumsArray[idx:idx+row_len_squared] = \
(data[row,:,np.newaxis] + data[col]).flatten()
idx += row_len_squared
#reapeat process for second possible sums array by replacing the range
#in the first loop from range(div) to range(div,2*div)
이것은 각 행을 통과하여 행렬 절반의 나머지 행과 합산합니다 (행 # 1 + 행 # 2, ..., 행 # 1 + 행 #n, 행 # 2 + 행 # 3 등).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다