如何在for循环中逐行构建一个numpy数组?

时间:2016-02-28 21:10:42

标签: python numpy

这基本上就是我想做的事情:

array = np.array()       #initialize the array. This is where the error code described below is thrown

for i in xrange(?):   #in the full version of this code, this loop goes through the length of a file. I won't know the length until I go through it. The point of the question is to see if you can build the array without knowing its exact size beforehand
    A = random.randint(0,10)
    B = random.randint(0,10)
    C = random.randint(0,10)
    D = random.randint(0,10)
    row = [A,B,C,D]
array[i:]= row        # this is supposed to add a row to the array with A,C,B,D as column values

此代码不起作用。首先它抱怨:TypeError:找不到必需的参数'object'(pos 1)。但我不知道数组的最终大小。

其次,我知道最后一行不正确,但我不知道如何在python / numpy中调用它。那我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

必须使用固定大小创建numpy数组。您可以创建一个小的(例如,一行),然后一次追加一行,但这将是低效的。没有办法有效地将numpy阵列逐渐增长到不确定的大小。您需要提前决定您希望它的大小,或者接受您的代码效率低下。根据数据的格式,您可以使用numpy.loadtxt之类的内容或pandas中的各种函数来读取数据。

答案 1 :(得分:0)

使用一维numpy数组列表或列表列表,然后将其转换为numpy 2D数组(如果需要,可以使用更多的嵌套并获得更多的尺寸)。

import numpy as np

a = []
for i in range(5):
    a.append(np.array([1,2,3])) # or a.append([1,2,3])
a = np.asarray(a) # a list of 1D arrays (or lists) becomes a 2D array

print(a.shape)
print(a)