我有2维训练数据。(4个特征200结果)
我证明了100个不同的应用程序与10个重复产生1000 csv文件。
我想为机器学习把每个csv结果叠加起来,但是我不知道怎么做。
我的每个csv文件看起来像下面.
test1.csv到numpy数组数据
[[0 'crc32_pclmul' 445 0]
[0 'crc32_pclmul' 270 4096]
[0 'crc32_pclmul' 234 8192]
...
[249 'intel_pmt' 272 4096]
[249 'intel_pmt' 224 8192]
[249 'intel_pmt' 268 12288]]
我试过下面的python代码。
path = os.getcwd()
csv_files = glob.glob(os.path.join(path, "*.csv"))
cnt=0
for f in csv_files:
cnt +=1
seperator = '_'
app = os.path.basename(f).split(seperator, 1)[0]
if cnt==1:
a = np.array(preprocess(f))
b = np.array(app)
else:
a = np.vstack((a, np.array(preprocess(f))))
b = np.append(b,app)
print(a)
print(b)
预处理函数返回每个csv文件的www.example.com_numpy结果。df.to_numpy results for each csv files.
我的期望值如下。a(1000,200,4)
[[[0 'crc32_pclmul' 445 0]
[0 'crc32_pclmul' 270 4096]
[0 'crc32_pclmul' 234 8192]
...
[249 'intel_pmt' 272 4096]
[249 'intel_pmt' 224 8192]
[249 'intel_pmt' 268 12288]],
[[0 'crc32_pclmul' 445 0]
[0 'crc32_pclmul' 270 4096]
[0 'crc32_pclmul' 234 8192]
...
[249 'intel_pmt' 272 4096]
[249 'intel_pmt' 224 8192]
[249 'intel_pmt' 268 12288]],
...
[[0 'crc32_pclmul' 445 0]
[0 'crc32_pclmul' 270 4096]
[0 'crc32_pclmul' 234 8192]
...
[249 'intel_pmt' 272 4096]
[249 'intel_pmt' 224 8192]
[249 'intel_pmt' 268 12288]]]
然而,我得到了这个。a(200000,4)
[[0 'crc32_pclmul' 445 0]
[0 'crc32_pclmul' 270 4096]
[0 'crc32_pclmul' 234 8192]
...
[249 'intel_pmt' 272 4096]
[249 'intel_pmt' 224 8192]
[249 'intel_pmt' 268 12288]]
我想使用[0]到[1000]访问每个csv结果,每个子数组看起来像(200,4)我该如何解决这个问题?我完全不知所措
3条答案
按热度按时间2wnc66cl1#
是的,这就是
vstack
(和append
)的作用,它合并同一个轴(行轴)上的内容。如果您希望(从这些示例中)沿着一个新轴追加,那么您需要添加它,或者使用更灵活的
stack
。或者,在1d的情况下,使用
vstack
代替append
但更重要的是,你不应该在循环中首先这样做,每一个函数(
stack
,vstack
,append
)都重新创建一个新的数组。将所有的
np.array(preprocess(f))
和b = np.array(app)
添加到一个纯python列表中,并且只在读取完它们之后才调用stack
和vstack
,这可能会更有效。或者,更好的方法是直接将
preprocess(f)
和app
追加到python list中,然后在循环结束后调用np.array
。所以,就像
oipij1gg2#
创建一个新列表,并在阅读后将每个列表添加到新列表中。(在循环外创建新列表)
4szc88ey3#
您必须从
vstack
更改为stack
vstack
只能沿着行堆叠,但stack
函数可以沿新轴堆叠。