Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy中附加数组_Python_Arrays_Numpy - Fatal编程技术网

Python 在numpy中附加数组

Python 在numpy中附加数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个循环,可以读取一个文件,直到到达末尾。每次通过循环时,我都提取一个1D numpy数组。我想将此数组附加到二维方向上的另一个numpy数组。也就是说,我可能会以这种形式阅读 x = [1,2,3] z = [[0,0,0], [1,1,1]] 我想把它附加到表单的某个地方 x = [1,2,3] z = [[0,0,0], [1,1,1]] 我知道我可以简单地执行z=numpy.append([z]、[x]、axis=0)并实现我想要的 z = [[0,0,0

我有一个循环,可以读取一个文件,直到到达末尾。每次通过循环时,我都提取一个1D numpy数组。我想将此数组附加到二维方向上的另一个numpy数组。也就是说,我可能会以这种形式阅读

x = [1,2,3]
z = [[0,0,0],
     [1,1,1]]
我想把它附加到表单的某个地方

x = [1,2,3]
z = [[0,0,0],
     [1,1,1]]
我知道我可以简单地执行
z=numpy.append([z]、[x]、axis=0)
并实现我想要的

z = [[0,0,0],
     [1,1,1],
     [1,2,3]]
我的问题来自这样一个事实:在循环的第一次运行中,我还没有任何附加内容,因为读入的第一个数组是2D数组的第一行。我不想写一个if语句来处理第一个案例,因为那很难看。如果我使用列表,我只需在循环之前执行
z=[]
,每次读取数组时,只需执行
z.append(x)
,即可获得所需的结果。然而,我在numpy中找不到类似的方法。我可以创建一个空的numpy数组,但是我不能以我想要的方式附加到它。有人能帮忙吗?我说得通吗

编辑:

经过更多的研究,我发现了另一个解决方法,它在技术上实现了我想要的功能,尽管我认为我会采用@Roger Fan给出的解决方案,因为numpy附加非常缓慢。我把它贴在这里就是为了让它在那里

我仍然可以在循环开始时定义
z=[]
。然后用`np.append(z,x)追加我的数组。这最终会给我类似的东西

z = [0,0,0,1,1,1,1,2,3]

然后,因为我读入的所有数组都是相同大小的,在循环之后,我可以简单地用'np.resize(n,m)'调整大小,然后得到我想要的。

不要这样做。将整个文件读入一个数组,例如使用
numpy.genfromtext()

使用这个数组,您可以在行上循环,在列上循环,并使用切片执行其他操作

或者,您可以创建一个常规列表,将许多数组附加到该列表中,最后使用
numpy.array(数组列表)
numpy.vstack(数组列表)
从列表中生成所需的数组


第二种方法的思想是“延迟数组创建”:首先查找并组织数据,然后创建一次所需的数组,该数组已经是最终形式了。

不要这样做。将整个文件读入一个数组,例如使用
numpy.genfromtext()

使用这个数组,您可以在行上循环,在列上循环,并使用切片执行其他操作

或者,您可以创建一个常规列表,将许多数组附加到该列表中,最后使用
numpy.array(数组列表)
numpy.vstack(数组列表)
从列表中生成所需的数组


第二种方法的思想是“延迟数组创建”:首先查找和组织数据,然后创建一次所需的数组,该数组已经是最终形式。

正如@heltonbiker在他的回答中提到的,类似于
np.genfromtext
的方法将是最好的方法,如果它适合您的需要。否则,我建议阅读关于附加到numpy数组的答案。基本上,numpy数组附加非常慢,应该尽可能避免。有两种更好(速度快约20倍)的解决方案:

如果事先知道长度,可以预先分配数组并将其指定给它

length_of_file = 5000
results = np.empty(length_of_file)
with open('myfile.txt', 'r') as f:
    for i, line in enumerate(f):
        results[i] = processing_func(line)
否则,只需保留一个列表或数组列表,并立即将其转换为numpy数组即可

results = []
with open('myfile.txt', 'r') as f:
    for line in f:
        results.append(processing_func(line))
results = np.array(results)

正如@heltonbiker在他的回答中提到的,如果符合您的需要,像
np.genfromtext
这样的东西将是最好的方法。否则,我建议阅读关于附加到numpy数组的答案。基本上,numpy数组附加非常慢,应该尽可能避免。有两种更好(速度快约20倍)的解决方案:

如果事先知道长度,可以预先分配数组并将其指定给它

length_of_file = 5000
results = np.empty(length_of_file)
with open('myfile.txt', 'r') as f:
    for i, line in enumerate(f):
        results[i] = processing_func(line)
否则,只需保留一个列表或数组列表,并立即将其转换为numpy数组即可

results = []
with open('myfile.txt', 'r') as f:
    for line in f:
        results.append(processing_func(line))
results = np.array(results)

我必须循环到文件的末尾,因为该文件的结构有些复杂,以至于numpy没有能够读取它的通用方法。我在文件中已经有了我自己的阅读方法,它非常好,我只想实现我在问题中提出的问题,所以它“更好”。然后我建议在我的回答中使用第二种方法。我必须循环到文件的结尾,因为文件的结构有些复杂,以至于numpy没有一个通用的方法能够读取它。我在文件中已经有了我自己的阅读方法,这很好,我只是想实现我在问题中提出的问题,因此它“更好”。然后我建议在我的回答中使用第二种方法。