2012-03-27 181 views
3

我有三个列表,我想要转换成一个列表。当我尝试下面的一个得到这个错误如何将3列表转换为1 3D Numpy数组

A = numpy.array(X,Y,Z,dtype=float) 
ValueError: only 2 non-keyword arguments accepted 

我没有看到任何东西在这里,说你只能给它两个参数

http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html

这里是代码

import numpy 
from numpy import * 

X = [] 
Y = [] 
Z = [] 

f = open(r'C:\My.txt') 
f.readline() 
for line in f: 
if line != '': 
    line = line.strip() 
    columns = line.split() 
    x = columns[2] 
    y = columns[3] 
    z = columns[4] 
    X.append(x) 
    Y.append(y)    #appends data in list 
    Z.append(z) 



A = numpy.array(X,Y,Z,dtype=float) 
A.shape(3,3) 
print(A) 

在此先感谢

+0

举一个你想要获得的三个列表和你的三维numpy数组的例子。 – eumiro 2012-03-27 09:30:39

+0

@eumiro现在我正在使用一个测试用例,其中列表是[[0,0,0,0],[3,4,4,3],[3,4,3,4]'我想要什么是第一列第一列两列第二列三列第三列。这最终会涉及三个非常大的列表,这些列表需要转换成一个数组进行分析。谢谢 – Surfcast23 2012-03-27 09:56:42

+2

你会得到一个二维数组,而不是三维数组。主要维度的长度将是三。 – alexis 2012-03-27 10:17:13

回答

4

尝试将您的三个列表传递给一个元组:

A = numpy.array((X, Y, Z), dtype=float) 

numpy.array文档numpy.array签名是

numpy.array(对象,D型细胞=无,复制=真,为了=无,subok =假,ndmin = 0 ,maskna =无,ownmaskna = FALSE)

即单个参数object就是被变成了ndarray,所有其他参数必须是一个关键字参数(因此你都拿到可用于错误消息)自定义数组的创建。

编辑在输入反应到Surfcast23的评论,在IDE中我尝试了以下内容:

>>> import numpy 

>>> x = [0, 0, 0, 0] 
>>> y = [3, 4, 4, 3] 
>>> z = [3, 4, 3, 4] 

>>> A = numpy.array((x, y, z), dtype=float) 
>>> A 
array([[ 0., 0., 0., 0.], 
     [ 3., 4., 4., 3.], 
     [ 3., 4., 3., 4.]]) 
>>> A.shape 
(3L, 4L) 
+0

试图给元组,但得到了一个'元组不可调用的错误' – Surfcast23 2012-03-27 09:55:58

+0

然后你的列表不是你说他们是或你期望他们是什么。这对您的问题评论中给出的示例列表适用于我(请参阅我的编辑)。 – Chris 2012-03-27 10:01:22

+0

我刚刚打印的列表中,这就是我得到'['0','0','0','0']'。我认为引号可能是问题,你怎么看? – Surfcast23 2012-03-27 10:19:12

0

我通过您的代码去,发现有一个失踪[]为X,Y,Z。数组不能将两个D数组合为一个数组。尝试将[X,Y,Z]放入数组中,并且您将得到正确的答案。

import numpy 
from numpy import * 

X = [] 
Y = [] 
Z = [] 

f = open(r'C:\My.txt') 
f.readline() 
for line in f: 
if line != '': 
    line = line.strip() 
    columns = line.split() 
    x = columns[2] 
    y = columns[3] 
    z = columns[4] 
    X.append(x) 
    Y.append(y)    #appends data in list 
    Z.append(z) 



A = numpy.array([X,Y,Z],dtype = float) 
A.shape(3,3) 
print(A)