Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python构建文本文件的更快方法_Python_Numpy - Fatal编程技术网

用python构建文本文件的更快方法

用python构建文本文件的更快方法,python,numpy,Python,Numpy,我有两个3d numpy阵列,分别称为a和b,512x512x512。我需要将它们写入文本文件: a1 b1 a2 b2 a3 b3 ... 这可以通过三回路来实现: lines = [] for x in range(nx): for y in range(ny): for z in range(nz): lines.append('{} {}'.format(a[x][y][z], b[x][y][z]) print('\n'.join(li

我有两个3d numpy阵列,分别称为a和b,512x512x512。我需要将它们写入文本文件:

a1 b1
a2 b2
a3 b3
...
这可以通过三回路来实现:

lines = []
for x in range(nx):
    for y in range(ny):
        for z in range(nz):
            lines.append('{} {}'.format(a[x][y][z], b[x][y][z])
print('\n'.join(lines))
但这是残酷的缓慢(10分钟时,我宁愿在mac pro上几秒钟)


我正在使用python 3.6,最新的numpy,我很乐意使用其他库,构建扩展,任何必要的东西。什么是加快速度的最佳方法?

如果不知道这三个数组中的数据类型,就很难理解您的问题,但是看起来
numpy.savetxt
可能对您有用

下面是它的工作原理:

import numpy as np
a = np.array(range(10))
np.savetxt("myfile.txt", a)
以下是文档:
如果不知道这三个数组中的数据类型,就有点难以理解您的问题,但是看起来
numpy.savetxt
可能对您有用

下面是它的工作原理:

import numpy as np
a = np.array(range(10))
np.savetxt("myfile.txt", a)
以下是文档:

您可以使用
np.stack
并将数组重塑为(-1,2)(两列)数组,然后使用
np.savetxt

a = np.arange(8).reshape(2,2,2)
b = np.arange(8, 16).reshape(2,2,2)

np.stack([a, b], axis=-1).reshape(-1, 2)

#array([[ 0,  8],
#       [ 1,  9],
#       [ 2, 10],
#       [ 3, 11],
#       [ 4, 12],
#       [ 5, 13],
#       [ 6, 14],
#       [ 7, 15]])
然后,您可以将文件另存为:

np.savetxt("*.txt", np.stack([a, b], axis=-1).reshape(-1, 2), fmt="%d")

您可以使用
np.stack
并将数组重塑为(-1,2)(两列)数组,然后使用
np.savetxt

a = np.arange(8).reshape(2,2,2)
b = np.arange(8, 16).reshape(2,2,2)

np.stack([a, b], axis=-1).reshape(-1, 2)

#array([[ 0,  8],
#       [ 1,  9],
#       [ 2, 10],
#       [ 3, 11],
#       [ 4, 12],
#       [ 5, 13],
#       [ 6, 14],
#       [ 7, 15]])
然后,您可以将文件另存为:

np.savetxt("*.txt", np.stack([a, b], axis=-1).reshape(-1, 2), fmt="%d")
您可以使用flatte()和dstack(),请参见下面的示例

a = np.random.random([5,5,5]).flatten()
b = np.random.random([5,5,5]).flatten()
c = np.dstack((a,b))
print c
将导致

[[[ 0.31314428  0.35367513]
  [ 0.9126653   0.40616986]
  [ 0.42339608  0.57728441]
  [ 0.50773896  0.15861347]
....
您可以使用flatte()和dstack(),请参见下面的示例

a = np.random.random([5,5,5]).flatten()
b = np.random.random([5,5,5]).flatten()
c = np.dstack((a,b))
print c
将导致

[[[ 0.31314428  0.35367513]
  [ 0.9126653   0.40616986]
  [ 0.42339608  0.57728441]
  [ 0.50773896  0.15861347]
....

哇,我肯定可以用谷歌搜索到这个,谢谢你提供了完整的例子@Henry您几乎不应该使用
numpy
为循环编写代码。至少,它承认失败了!哇,我肯定可以用谷歌搜索到这个,谢谢你提供了完整的例子@Henry您几乎不应该使用
numpy
为循环编写代码。至少,它承认失败了!但是savetxt需要一个二维数组,而savetxt需要一个二维数组