3 回答
TA贡献2051条经验 获得超10个赞
嗯,确实很棘手!
问题出在任务上:
run_results = {'Run':i,"Sum of remaining points": sum ,"Removed row": removed_row}
它存储对 的引用removed_row,就像在 Python 中变量只是对对象的引用一样。
创建新数组np.array(removed_row):
import random
import numpy as np
points = np.array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]])
index = 1
all_results = []
N = 5
for i in range(N):
np.random.shuffle(points)
removed_row = points[:index]
print(f'Removed row from run {i}: {removed_row}')
remaining_rows = points[index:]
sum = np.sum(remaining_rows)
run_results = {'Run':i,"Sum of remaining points": sum ,"Removed row": np.array(removed_row)}
all_results.append(run_results)
print(all_results)
输出:
Removed row from run 0: [[4 4 4 4]]
Removed row from run 1: [[6 6 6 6]]
Removed row from run 2: [[6 6 6 6]]
Removed row from run 3: [[3 3 3 3]]
Removed row from run 4: [[4 4 4 4]]
[{'Run': 0, 'Sum of remaining points': 68, 'Removed row': array([[4, 4, 4, 4]])}, {'Run': 1, 'Sum of remaining points': 60, 'Removed row': array([[6, 6, 6, 6]])}, {'Run': 2, 'Sum of remaining points': 60, 'Removed row': array([[6, 6, 6, 6]])}, {'Run': 3, 'Sum of remaining points': 72, 'Removed row': array([[3, 3, 3, 3]])}, {'Run': 4, 'Sum of remaining points': 68, 'Removed row': array([[4, 4, 4, 4]])}]
TA贡献1808条经验 获得超4个赞
您需要实际删除该行:
import random
import numpy as np
Points = np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4],[5,5,5,5],[6,6,6,6]])
index = 1
all_results = []
N = 5
for i in range(N):
np.random.shuffle(Points)
removed_row = Points[:index]
Points = Points[index:] # <<<<<<< Remove row
print(f'Removed row from run {i}: {removed_row}')
remaining_rows = Points[index:]
sum = np.sum(remaining_rows)
run_results = {'Run':i,"Sum of remaining points": sum ,"Removed row": removed_row}
all_results.append(run_results)
print(all_results)
输出
Removed row from run 0: [[3 3 3 3]]
Removed row from run 1: [[6 6 6 6]]
Removed row from run 2: [[1 1 1 1]]
Removed row from run 3: [[2 2 2 2]]
Removed row from run 4: [[4 4 4 4]]
[{'Run': 0, 'Sum of remaining points': 56, 'Removed row': array([[3, 3, 3, 3]])},
{'Run': 1, 'Sum of remaining points': 40, 'Removed row': array([[6, 6, 6, 6]])},
{'Run': 2, 'Sum of remaining points': 24, 'Removed row': array([[1, 1, 1, 1]])},
{'Run': 3, 'Sum of remaining points': 16, 'Removed row': array([[2, 2, 2, 2]])},
{'Run': 4, 'Sum of remaining points': 0, 'Removed row': array([[4, 4, 4, 4]])}]
TA贡献1796条经验 获得超10个赞
请注意,随机播放需要很长时间。这是一种大量矢量化的方法:
# choose the index to drop first:
to_drop = np.random.choice(np.arange(len(Points)), N, replace=False)
# remain sum:
remains = Points.sum(0) - Points[to_drop[::-1]].cumsum(0)
out = [{'run':i, 'sum_renmaining': remains[i], 'remove row': Points[to_drop[i]]} for i in range(N)]
添加回答
举报