使用Python将CSV读取到三维数组时识别新数组



我遇到以下问题,无法找到解决方案:

.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]]])

相关内容

  • 没有找到相关文章