将 3D numpy 数组写入文件(包括其索引)



我很陌生,所以很抱歉,但希望我有语法正确,以便您理解我的问题!
我有一个形状为 (2,2,2( 的 numpy 数组

array([[[ 1, 1],
        [ 2, 2]],
       [[ 3, 3],
        [ 4, 4]]])

如何将其写入文件,以便它列出索引和数组值即

0 0 0 1
1 0 0 3
0 1 0 2
1 1 0 4
0 0 1 1
1 0 1 3
0 1 1 2
1 1 1 4

谢谢英。

您可以使用

numpy.ndenumerate

a = np.array([[[1, 1],
               [2, 2]],
              [[3, 3],
               [4, 4]]])
for items in np.ndenumerate(a):
    print(items)

输出

((0, 0, 0), 1)
((0, 0, 1), 1)
((0, 1, 0), 2)
((0, 1, 1), 2)
((1, 0, 0), 3)
((1, 0, 1), 3)
((1, 1, 0), 4)
((1, 1, 1), 4)

要删除括号,您可以解压缩所有内容

for indexes, value in np.ndenumerate(a):
    x,y,z = indexes
    print(x,y,z,value)

输出

0 0 0 1
0 0 1 1
0 1 0 2
0 1 1 2
1 0 0 3
1 0 1 3
1 1 0 4
1 1 1 4

处理文件写入

with open('file.txt', 'w') as f:
    for indexes, value in np.ndenumerate(a):
        x,y,z = indexes
        f.write('{} {} {} {}n'.format(x,y,z,value))

不确定这是否是 NumPy 中执行此操作的最佳方法,但您可以使用 numpy.unravel_indexnumpy.dstacknumpy.savetxt 的组合来执行此操作:

>>> arr = np.array([[[ 1, 1],
        [ 2, 2]],
       [[ 3, 3],
        [ 4, 4]]])
>>> a = np.dstack(np.unravel_index(np.arange(arr.size),
                                                   arr.shape) + (arr.ravel(),))
>>> np.savetxt('foo.txt', a[0,...], fmt='%d')
>>> !cat foo.txt
0 0 0 1
0 0 1 1
0 1 0 2
0 1 1 2
1 0 0 3
1 0 1 3
1 1 0 4
1 1 1 4

相关内容

最新更新