我遇到以下问题,无法找到解决方案:
.CSV文件包含多个2D阵列的数据,如下所示:
# Date:20221027-151458
# Array shape (number, width, height): 3, 4, 4)
# Some comments about the data
# some more
1; 2; 3; 4
5; 6; 7; 8
9; 10; 11; 12
#new slice
20; 21; 23; 24
25; 26; 27; 28
29; 30; 31; 32
#new slice
100; 101; 102; 103
104; 105; 106; 107
108; 109; 110; 111
#new slice
1000; 1001; 1002; 1003
1004; 1005; 1006; 1007
1008; 1009; 1010; 1011
我的目标是将CSV读出到3D阵列中#新切片"-注释到第三维中的新数组中。
编辑:结果应该是这样的:
irdata([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]],
[[20, 21, 23, 24],
[25, 26, 27, 28],
[29, 30, 31, 32]],
[[100, 101, 102, 103],
[104, 105, 106, 107],
[108, 109, 110, 111]],
[[1000, 1001, 1002, 1003],
[1004, 1005, 1006, 1007],
[1008, 1009, 1010, 1011]]])
你能帮我找到一种方法吗?
最好的
基督教
我尝试过使用numpy.loadtxt,它将整个数据集作为一个2D数组(在本例中是一个(100,10(数组(,使用panda也会给我一个2D阵列,但其中包含注释。
您可以尝试:
text = '''# Date:20221027-151458
# Array shape (number, width, height): 3, 4, 4)
# Some comments about the data
# some more
1; 2; 3; 4
5; 6; 7; 8
9; 10; 11; 12
#new slice
20; 21; 23; 24
25; 26; 27; 28
29; 30; 31; 32
#new slice
100; 101; 102; 103
104; 105; 106; 107
108; 109; 110; 111
#new slice
1000; 1001; 1002; 1003
1004; 1005; 1006; 1007
1008; 1009; 1010; 1011
'''
import re
a = (np.dstack([np.vstack([np.fromstring(l, sep=';', dtype='int') for l in s.strip().split('n')])
for s in re.split(r'#.*n(?=d)', text)[1:]])
.T.swapaxes(1,2)
)
a.shape
# (4, 3, 4)
输出:
array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]],
[[ 20, 21, 23, 24],
[ 25, 26, 27, 28],
[ 29, 30, 31, 32]],
[[ 100, 101, 102, 103],
[ 104, 105, 106, 107],
[ 108, 109, 110, 111]],
[[1000, 1001, 1002, 1003],
[1004, 1005, 1006, 1007],
[1008, 1009, 1010, 1011]]])