Python / Numpy问题。最后一年物理本科...我有一小段代码,从公式创建一个数组(基本上是一个n×n矩阵)。我将数组重新整形为一列值,从中创建一个字符串,格式化以删除无关的括号等,然后将结果输出到保存在用户的Documents目录中的文本文件,然后由另一个软件使用。麻烦高于某个值“n”,输出只给出了第一个和最后三个值,其中“......”。我认为Python会自动删除最终结果以节省时间和资源,但我需要在最终文本文件中使用所有这些值,无论处理需要多长时间,而且我不能为我的生活找到如何阻止它这样做。相关代码复制在......
之下import numpy as np; import os.path ; import os
'''
Create a single column matrix in text format from Gaussian Eqn.
'''
save_path = os.path.join(os.path.expandvars("%userprofile%"),"Documents")
name_of_file = 'outputfile' #<---- change this as required.
completeName = os.path.join(save_path, name_of_file+".txt")
matsize = 32
def gaussf(x,y): #defining gaussian but can be any f(x,y)
pisig = 1/(np.sqrt(2*np.pi) * matsize) #first term
sumxy = (-(x**2 + y**2)) #sum of squares term
expden = (2 * (matsize/1.0)**2) # 2 sigma squared
expn = pisig * np.exp(sumxy/expden) # and put it all together
return expn
matrix = [[ gaussf(x,y) ]\
for x in range(-matsize/2, matsize/2)\
for y in range(-matsize/2, matsize/2)]
zmatrix = np.reshape(matrix, (matsize*matsize, 1))column
string2 = (str(zmatrix).replace('[','').replace(']','').replace(' ', ''))
zbfile = open(completeName, "w")
zbfile.write(string2)
zbfile.close()
print completeName
num_lines = sum(1 for line in open(completeName))
print num_lines
非常感谢任何帮助!
答案 0 :(得分:1)
一般来说,如果你只想写内容,你应该遍历数组/列表。
zmatrix = np.reshape(matrix, (matsize*matsize, 1))
with open(completeName, "w") as zbfile: # with closes your files automatically
for row in zmatrix:
zbfile.writelines(map(str, row))
zbfile.write("\n")
输出:
0.00970926751178
0.00985735189176
0.00999792646484
0.0101306077521
0.0102550302672
0.0103708481917
0.010477736974
0.010575394844
0.0106635442315
.........................
但是使用numpy
我们只需要使用tofile:
zmatrix = np.reshape(matrix, (matsize*matsize, 1))
# pass sep or you will get binary output
zmatrix.tofile(completeName,sep="\n")
输出格式与上述格式相同。
在矩阵上调用str
将为您提供与尝试print
时所获得的类似格式的输出,这样就是您将文件格式化的截断输出写入的内容。
考虑到你正在使用python2,使用xrange
会更有效率,使用rane创建一个列表,也不建议使用以冒号分隔的多个导入,你可以简单地说:
import numpy as np, os.path, os
变量和函数名称也应使用下划线z_matrix
,zb_file
,complete_name
等。
答案 1 :(得分:0)
您不应该使用numpy
数组的字符串表示。一种方法是使用tofile
:
zmatrix.tofile('output.txt', sep='\n')