Numpy Array2string just writing … in string?
本问题已经有最佳答案,请猛点这里访问。
我有一件简单的事情要做,读一些向量,然后把它们写在一个文件中。
矢量是1024维的。
1 2 3 4 | for emb in src: print(len(emb[0].detach().cpu().numpy())) #--> prints 1024! f.write(np.array2string(emb[0].detach().cpu().numpy(), separator=', ') +" ") |
我的文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 | [-0.18077464, -0.02889516, 0.33970496, ..., -0.28685367, 0.00343359, -0.00380083] [-0.04554039, 0.0891239 , 0.0457519 , ..., -0.02622034, 0.04410202, -0.03626832] [ 0.2415923 , 0.36748591, -0.10974079, ..., 0.06169772, 0.0134424 , 0.01647076] [ 0.019123 , 0.00409475, 0.03623311, ..., -0.13063622, 0.02434589, 0.00400023] [ 0.01281842, 0.00028924, 0.03185712, ..., -0.062907 , 0.02143336, -0.00206215] [ 0.01748654, 0.00136842, -0.01337154, ..., -0.04148545, 0.00875527, -0.03006736] |
所以,我不能访问我的向量,1024维被转换成任何6维或7维的向量。:(
如何正确地将向量写入文件?
干杯:
将二维数组写入文本文件(以便可以读取)的正常方法是使用
1 2 3 4 5 6 7 8 9 | In [309]: src = np.random.rand(6,4) In [310]: src Out[310]: array([[0.78756364, 0.11385762, 0.16631052, 0.10987765], [0.59954504, 0.80417064, 0.22461205, 0.47827772], [0.10993457, 0.11650874, 0.55887911, 0.71854456], [0.53572426, 0.55055622, 0.25423811, 0.46038837], [0.05418115, 0.50696182, 0.31515915, 0.65310375], [0.81168653, 0.81063907, 0.95371101, 0.11875685]]) |
写:
1 2 3 4 5 6 7 8 | In [311]: np.savetxt('test.txt', src, fmt='%10.6f',delimiter=',') In [312]: cat test.txt 0.787564, 0.113858, 0.166311, 0.109878 0.599545, 0.804171, 0.224612, 0.478278 0.109935, 0.116509, 0.558879, 0.718545 0.535724, 0.550556, 0.254238, 0.460388 0.054181, 0.506962, 0.315159, 0.653104 0.811687, 0.810639, 0.953711, 0.118757 |
测试负载:
1 2 3 4 5 6 7 8 | In [314]: np.genfromtxt('test.txt',delimiter=',') Out[314]: array([[0.787564, 0.113858, 0.166311, 0.109878], [0.599545, 0.804171, 0.224612, 0.478278], [0.109935, 0.116509, 0.558879, 0.718545], [0.535724, 0.550556, 0.254238, 0.460388], [0.054181, 0.506962, 0.315159, 0.653104], [0.811687, 0.810639, 0.953711, 0.118757]]) |
1 2 3 4 5 6 7 8 9 10 11 12 | In [315]: fmt = ','.join(['%10.6f']*4) In [316]: fmt Out[316]: '%10.6f,%10.6f,%10.6f,%10.6f' In [317]: for row in src: ...: print(fmt%tuple(row)) # f.write(...) ...: 0.787564, 0.113858, 0.166311, 0.109878 0.599545, 0.804171, 0.224612, 0.478278 0.109935, 0.116509, 0.558879, 0.718545 0.535724, 0.550556, 0.254238, 0.460388 0.054181, 0.506962, 0.315159, 0.653104 0.811687, 0.810639, 0.953711, 0.118757 |
事实上,我可以将其打包成文件写入:
1 2 3 4 5 6 7 8 | In [318]: with open('test1.txt','w') as f: ...: for row in src: ...: print(fmt%tuple(row), file=f) ...: In [319]: cat test1.txt 0.787564, 0.113858, 0.166311, 0.109878 0.599545, 0.804171, 0.224612, 0.478278 ... |
矢量仍然是1024维的,但显示屏只显示阵列的缩减视图。
您可以通过设置打印选项查看整个阵列:
1 2 | import numpy as np np.set_printoptions(threshold=np.nan) |