热线电话:13121318867

登录
2019-02-16 阅读量: 677
使用insert函数出错

我的代码算法:

代码的Moto:我的代码从特定文件夹中获取值,每个文件夹包含7个'txt'文件,从一个用户生成,这样多个文件夹包含多个用户的多个数据。

step1:启动1st for循环,并使用特定文件夹中有多少文件夹控制它,并在变量'path'中存储第一个文件夹的第一个路径。

step2:使用2nd for循环打开路径并获取7 txt文件的数据。之后,它关闭第二个for循环并执行其余代码。

step3:在一个1d数组中Concat 7个txt文件的数据。

step4:使用获取2个文件夹的数据创建2d数组

step5(这里出现问题):在2d数组ind inser id数组中创建一行

import numpy as np

import array as arr

import os

f_path='Result'

array_control_var=0

#for feacth directory path

for (path,dirs,file) in os.walk(f_path):

if(path==f_path):

continue

f_path_1= path +'\page_1.txt'

#Get data from page1 indivisualy beacuse there string type data exiest

pgno_1 = np.array(np.loadtxt(f_path_1, dtype='U', delimiter=','))

#only for page_2.txt

f_path_2= path +'\page_2.txt'

with open(f_path_2) as f:

str_arr = ','.join([l.strip() for l in f])

pgno_2 = np.asarray(str_arr.split(','), dtype=int)

#using loop feach data from those text file.datda type = int

for j in range(3,8):

#store file path using variable

txt_file_path=path+'\page_'+str(j)+'.txt'

if os.path.exists(txt_file_path)==True:

#genarate a variable name that auto incriment with for loop

foo='pgno_'+str(j)

else:

break

#pass the variable name as string and store value

exec(foo + " = np.array(np.loadtxt(txt_file_path, dtype='i', delimiter=','))")

#marge all array from page 2 to rest in single array in one dimensation

f_array=np.concatenate((pgno_2,pgno_3,pgno_4,pgno_5,pgno_6,pgno_7), axis=0)

#for first time of the loop assing this value

if array_control_var==0:

main_f_array=f_array

if array_control_var==1:

#here use np.array()

main_f_array=np.array([main_f_array,f_array])

else:

main_f_array=np.insert(main_f_array, array_control_var, f_array, 0)

array_control_var+=1

print(main_f_array)

我想要像这样的输出

初始[[0,0,0],[0,0,0,]]

插入后[[0,0,0],[0,0,0],[0,0,0]]

但是输出是

[array([0, 0, 0])

array([0, 0, 0])

0 0 0]

解决办法:使用insert(或变体concatenate)收集数组很难做到,而且工作时速度很慢。它每次都构建一个全新的数组。收集列表中的数组,并在最后进行一个数组构建更容易,更快。列表追加是高效的,易于使用。

我可以用以下方法重现它:

In [281]: arr = np.zeros(2, object)

In [282]: arr

Out[282]: array([0, 0], dtype=object)

In [283]: arr[0] = np.array([0,0,0])

In [284]: arr[1] = np.array([0,0,0])

In [285]: arr

Out[285]: array([array([0, 0, 0]), array([0, 0, 0])], dtype=object)

In [286]: np.insert(arr, 2, np.array([0,0,0]), 0)

Out[286]: array([array([0, 0, 0]), array([0, 0, 0]), 0, 0, 0], dtype=object)

在较早的迭代中,main_f_array必须已创建为对象dtype数组。

如果它是一个'正常'的2d数组,插入将是不同的:

In [287]: arr1 = np.zeros((2,3),int)

In [288]: np.insert(arr1, 2, np.array([0,0,0]), 0)

Out[288]:

array([[0, 0, 0],

[0, 0, 0],

[0, 0, 0]])

或者更多迭代

In [289]: f_array = np.array([0,0,0])

In [290]: main = f_array

In [291]: main = np.array([main, f_array])

In [292]: main

Out[292]:

array([[0, 0, 0],

[0, 0, 0]])

In [293]: main = np.insert(main, 2, f_array, 0)

In [294]: main

Out[294]:

array([[0, 0, 0],

[0, 0, 0],

[0, 0, 0]])

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子