我一直在拼命想弄清楚为什么数组连接会导致数组在第一次迭代时乘以2 ...
这是我的代码:
def run(filename, max_iter = 1e6):
data, fm = data_extraction(filename)
large_output = None
iteration_count = 0
while iteration_count < max_iter:
iteration_count += 1
print iteration_count
results = calculations(data, (0.9,1.1))
if large_output == None:
large_output = results[:,1] #stores the energy array
print large_output
else:
large_output = np.c_[ large_output, results[:,1]]
#large_output = np.vstack([large_output, power_and_energy_var[:,1]])
print large_output
这是print语句的控制台输出和仅3次迭代:
1
[ 3.59891391e+01 5.75841568e+00 ]
2
[[ 7.22402719e+01 3.62511328e+01]
[ 1.16726670e+01 5.91425129e+00]]
3
[[ 7.22402719e+01 3.62511328e+01 3.70141435e+01]
[ 1.16726670e+01 5.91425129e+00 6.02176042e+00]]
正如您所看到的,7.22402719e+01
约为3.59891391e+01
两倍,但连续迭代并未发生......
我不知道为什么会这样。我已经尝试了一切可能的想法:
1)检查使用print语句执行的确切内容 2)重新加载内核以擦除任何延迟变量 3)使用np.vstack而不是np.c_(相同的错误)
欢迎任何帮助!!
答案 0 :(得分:1)
使用简单的results
数组复制连接:
In [229]: results = np.arange(12).reshape(2,6)
In [230]: out = results[:,1]
In [231]: out = np.c_[out, results[:,2]]
In [232]: out = np.c_[out, results[:,3]]
In [233]: out
Out[233]:
array([[1, 2, 3],
[7, 8, 9]])
即使初始out
是1d,后续的只是连接列
In [234]: results[:,1]
Out[234]: array([1, 7])
因此,cnt 1和2之间的任何有趣业务都是data
和calculations
中未知行为的结果。 np.c_
连接不是问题。
也就是说,首先建立列表的建议很好
In [237]: out = []
In [238]: out.append(results[:,1])
In [239]: out.append(results[:,2])
In [240]: out.append(results[:,3])
In [241]: out
Out[241]: [array([1, 7]), array([2, 8]), array([3, 9])]
In [242]: np.array(out)
Out[242]:
array([[1, 7],
[2, 8],
[3, 9]])
虽然在创建results
时可能不会绕过任何有趣的事情。
答案 1 :(得分:0)
尽管在评论和答案中提出了非常好的评论和建议,答案却比那简单得多(通常是我花了很长时间在电脑上敲头)。
large_output = results[:,1]
应明确表示为数组:
large_output = np.array(results[:,1])