Numpy Array Concatenation Multiplies array ...为什么?

时间:2017-06-07 17:09:06

标签: python arrays numpy concatenation

我一直在拼命想弄清楚为什么数组连接会导致数组在第一次迭代时乘以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_(相同的错误)

欢迎任何帮助!!

2 个答案:

答案 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之间的任何有趣业务都是datacalculations中未知行为的结果。 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])