【发布时间】:2017-06-07 17:09:05
【问题描述】:
我一直在拼命想弄清楚为什么数组连接会导致数组在第一次迭代时被乘以 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
这是打印语句和 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) 使用打印语句检查正在执行的具体内容 2)重新加载内核以擦除任何挥之不去的变量 3) 使用 np.vstack 而不是 np.c_ (同样的错误)
非常欢迎任何帮助!
【问题讨论】:
-
large_output = results[:,1]正在查看results的一部分。如果它正在查看的数组发生更改,则视图将反映这些更改。连接(虽然很慢,而且是个坏主意)可能与您的问题无关。 -
large_output或results[:,1]在第一次迭代时不是空的吗?输出表明堆叠的数组在那里是一维的,而连续的则是二维的。 -
@Divakar : no large_output 在第一次迭代期间被填满,因为它是 None。并且结果不为空。
-
@user2357112 :我不确定我是否理解您评论的第一部分抱歉。你介意再解释一遍吗?你会建议什么替代串联?
-
Here's a quick intro to views and copies,至于连接,适当的决定将取决于您的代码实际在做什么。
标签: python arrays numpy concatenation