1

我需要使用 numpy 将数组写入文件,并且我正在尝试将数组作为原始输入读取并将其转换为数组。我的问题似乎来自 line 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()
4

2 回答 2

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.

import ast
inarray = np.array(ast.literal_eval(inlist))
于 2013-03-31T14:50:07.490 回答
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。使用 in 中的函数会稍微好一些map,因此当您发现某些不是明确的TrueFalse.

请注意,这只适用于真/假值列表。对于嵌套和括号列表,使用ast.literal_evalunutbu 建议显然是更好的解决方案:

In [1]: import ast

In [2]: ast.literal_eval('[[True], [False], [True]]')
Out[2]: [[True], [False], [True]]

但这将要求您使用完整的 Python 语法。如果要使用 0 和 1 而不是 True 和 False,请记住使用booldtype:

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)
于 2013-03-31T14:50:27.140 回答