如何将3个列表转换为一个3D Numpy数组

8
我有三个列表,想将它们转换为一个列表。尝试以下操作后出现了错误:
 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)

Thanks in advanceh


请提供您的三个列表和您想要得到的三维numpy数组的示例。 - eumiro
@eumiro 目前我正在使用一个测试案例,其中三个列表分别是 [0,0,0,0], [3,4,4,3], [3,4,3,4]。我希望第一列是列表一,第二列是列表二,第三列是列表三。这最终涉及到三个非常大的列表需要转换为一个数组进行分析。谢谢。 - Stripers247
2
你将获得一个二维数组,而不是三维的。主维度的长度将为三。 - alexis
2个回答

7
尝试将您的三个列表作为元组传递:
A = numpy.array((X, Y, Z), dtype=float)

numpy.array 文档中,numpy.array 的签名为:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0, maskna=None, 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)

尝试提供元组,但出现了“元组不可调用错误”。 - Stripers247
那么你的列表不是你所说的或者你期望的。对于你在问题评论中提供的示例列表,这对我来说很好用(请参见我的编辑)。 - Chris
我刚刚打印了其中一个列表,得到了['0', '0', '0', '0']。 我认为引号可能是问题所在,你认为呢? - Stripers247
不应该有问题。我刚刚尝试了上面的示例,但将 x = .. 替换为 x = ['0', '0', '0', '0'],并类似地替换了 yz,我得到了与 A 完全相同的结果。numpy.arraydtype 参数将把字符串转换为浮点数。 - Chris
1
@Surfcast23 - 听起来你正在执行 x.shape()。它不是一个函数,而是一个元组。你不能调用它。只需要写成 shape = x.shape 即可。 - Joe Kington
1
@JoeKington 同意。@Surfcast23 您可以使用 A.shape = (3, 3) 而不是 A.shape(3,3) 来修改数组的形状。但是,在您的问题的代码中根本不需要使用它。实际上,在您的示例中,您正在将一个数组重塑为具有不同元素数量的数组,这将引发 ValueError 异常。 - Chris

0
我看了你的代码,发现X、Y、Z缺少一个[]。数组不能将两个二维数组作为一个数组。尝试在数组中加入[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)

不要管 import * 是不好的编程习惯,那么 import numpy 然后紧接着又写 from numpy import * 的意义是什么? - AMC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接