我需要使用numpy将数组写入文件,我试图将数组作为原始输入读入并将其转换为数组。我的问题似乎来自这条线
inarray = np.array(inlist)
,因为代码没有返回数组。
这是我的整个代码:
import numpy as np
def write():
inlist = raw_input('Please enter a square array of booleans.')
print inlist
inarray = np.array(inlist)
print inarray
dims = inarray.shape
print dims
dim = dims[0]
name = open(name,'w')
name.write(dims)
dimint = int(dim)
i = 0
while i < dimint:
name.write(inarray[i])
i = i+1
return name
write()
答案 0 :(得分:1)
raw_input
正在返回一个字符串。如果您将此字符串直接提供给np.array
,则会返回NumPy标量:
In [17]: np.array('foo')
Out[17]:
array('foo',
dtype='|S3')
In [18]: np.array('abl').shape
Out[18]: ()
In [19]: np.array('abl').dtype
Out[19]: dtype('|S3')
在将字符串转换为np.array
之前,您需要将字符串转换为Python对象(例如列表列表)。
import ast
inarray = np.array(ast.literal_eval(inlist))
答案 1 :(得分:0)
raw_input
函数返回一个字符串。
你可以做的是split()
字符串和map
一个函数:
In [1]: test = 'True False True False False'
In [2]: test.split()
Out[2]: ['True', 'False', 'True', 'False', 'False']
In [3]: map(lambda x: x in ['True', '1'], test.split())
Out[3]: [True, False, True, False, False]
lambda表达式中的列表应包含您要识别als True
的所有值。使用map
中的函数会稍微好一些,因此当您发现非明确True
或False
的内容时,可以引发异常。
请注意,此仅适用于true / false值列表。对于嵌套和括号列表,使用ast.literal_eval
作为unutbu建议显然是更好的解决方案:
In [1]: import ast
In [2]: ast.literal_eval('[[True], [False], [True]]')
Out[2]: [[True], [False], [True]]
但这需要您使用完整的Python语法。如果您想使用0和1而不是True和False,请记住使用bool
dtype:
In [5]: a = ast.literal_eval('[[1, 0, 1], [0, 1, 0], [0,0,1]]')
In [6]: np.array(a, dtype=bool)
Out[6]:
array([[ True, False, True],
[False, True, False],
[False, False, True]], dtype=bool)