2017-07-15 67 views
3

我有一个数组。我的任务是打印出阵列及其形状,大小,项目大小,尺寸和数据类型名称。输出应该是一个文本文件 - 每个属性应该在一个新的行。将一个numpy数组的内容和几个属性打印到一个文本文件中

当我尝试使用下面的代码,我得到的错误:

File "<ipython-input-76-f4d4f45285be>", line 1, in <module> 
    print(a.shape) 

AttributeError: 'NoneType' object has no attribute 'shape' 

我已经尝试了两个选项,打开一个文本文件和np.savetxt。这两个似乎都没有工作。

下面是代码:

import numpy as np 

a = np.arange(15).reshape(3,5) 

a = print(a) 

shape = print(a.shape) 

size = print(a.size) 

itemsize = print(a.itemsize) 

ndim = print(a.ndim) 

dtype = print(type(a.dtype)) 

with open("demo_numpy.tx","w") as text: 
    text.write(a,shape,size,itemsize,ndim,dtype, file = text) 

np.savetxt('demo_numpy.txt',[a,shape,size,itemsize,ndim,dtype]) 

我在做什么错了,我怎么能解决我的输出?

+1

为什么你要做'a = print(a)'? 'print'返回'None'。 –

+0

我添加了“variable =”,这样我就可以在输出文件语句 – zsad512

+0

中列出打印语句啊,你误解了打印的功能。 MSeifert解释了原因。 –

回答

1

print只是打印传入的值stdout返回None。如果您要访问的属性只是做没有print

import numpy as np 

a = np.arange(15).reshape(3,5) 
shape = a.shape 
size = a.size 
itemsize = a.itemsize 
ndim = a.ndim 
dtype = a.dtype 

如果你想print不分配的print返回值:

print(a) 
print(a.shape) 
print(a.size) 
print(a.itemsize) 
print(a.ndim) 
print(a.dtype) 

请注意,你不没有正确写入文件,在第一种情况下,您一次只能写入一个参数,您需要输入str.join或执行多个text.write。在第二种情况下,你应该检查numpy.savetxt的文档 - 它期望一个数组作为第二个参数而不是几个属性的列表。

例如:

with open("demo_numpy.tx","w") as text: 
    text.write(str(a)) 
    text.write(str(shape)) 
    text.write(str(size)) 
    text.write(str(itemsize)) 
    text.write(str(ndim)) 
    text.write(str(dtype)) 

# or: 
# text.write('\n'.join(map(str, [a,shape,size,itemsize,ndim,dtype]))) 

np.savetxt('demo_numpy.txt', a) 
+0

当我尝试你的建议时,我得到两个错误。每个文本功能一个。 TypeError:write()不带关键字参数和TypeError:数组dtype('object')和格式说明符('%.18e')之间不匹配 – zsad512

+0

最后一段应该解释为什么会发生这种情况。您正确使用'file.write'和'np.savetxt'。即尝试'np.savetxt('demo_numpy.txt',a)'代替。 – MSeifert

+0

好的,所以我想根据评论中的第一个代码块访问值。但是现在,如何将每个变量打印到一个新的文本文件中? – zsad512

0

我想用这样的:

# import numpy as np 
# my_array = np.arange(3) 
metadata = [(method, getattr(my_array, method)) for method in dir(my_array) if (not callable(getattr(my_array, method))) and (not method.startswith('__'))] 
names, values = zip(*metadata) # 2 lists 

然后遍历names & values和写入到文件中。

相关问题