如何在python中从原始输入创建一个numpy数组?

时间:2013-03-31 14:42:05

标签: python arrays numpy dimensions

我需要使用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()

2 个答案:

答案 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中的函数会稍微好一些,因此当您发现非明确TrueFalse的内容时,可以引发异常。

请注意,此适用于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)