Python错误 - 使用序列设置数组元素

时间:2015-10-24 00:12:07

标签: python arrays numpy

我一直在尝试运行提供的代码来制作颜色贴图。

数据集有xy坐标,每个坐标都有自己的颜色。

但是,当我运行代码时,出现错误setting an array element with a sequence

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from math import pi, sin

x, y, c = np.loadtxt('finaltheta.txt', unpack = True)

N = int(len(c)**0.5)
c = c.reshape(N,N)

plt.figure()
plt.imshow(c, extent = (np.amin(x), np.amax(x), np.amin(y), np.amax(y)), cmap = cm.binary, vmin = 0.0, vmax = 1.0)
cbar = plt.colorbar()
plt.show()

我推断错误来自np.loadtxt行。

2 个答案:

答案 0 :(得分:0)

文件中的分隔符是什么?

我可以用以下方式模拟这种负载:

In [223]: txt=b"1 2 3\n4 5 6".splitlines()
In [224]: a,b,c=np.loadtxt(txt,unpack=True)
In [225]: a
Out[225]: array([ 1.,  4.])
In [226]: b
Out[226]: array([ 2.,  5.])
In [227]: c
Out[227]: array([ 3.,  6.])

或者带有分隔文字

In [228]: txt=b"1,2,3\n4,5,6".splitlines()
In [229]: a,b,c=np.loadtxt(txt,unpack=True,delimiter=',')

如何推断错误在loadtxt中?通常,错误会为您提供堆栈跟踪,以清楚地指示错误发生的位置。它可能在loadtxt中,但如果是这样,则跟踪显示它确实是加载文本调用。

我无法想到会在loadtxt中产生此错误的文本。错误意味着某事/某人正在做类似

的事情
In [236]: a[0]=[1,2,3]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-236-c47480f4cd6d> in <module>()
----> 1 a[0]=[1,2,3]

ValueError: setting an array element with a sequence.

loadtxt sequence引发了SO问题,例如

CDF Cumulative Distribution Function Error

使用stacktrace报告错误:

Traceback (most recent call last):
  File "cum_graph.py", line 7, in <module>
    data = np.loadtxt('e_p_USC_30_days.txt')
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 804, in loadtxt
    X = np.array(X, dtype)
ValueError: setting an array element with a sequence.

还有一个文件样本。不幸的是,接受的答案只是试图提出一个原因。我也无法重现错误。这表明文件中的字符没有在cutnpaste中复制和/或用户有较旧的numpy版本和/或存在操作系统问题(我在linux上)。

看看804行的输入是什么样子,但这需要一个可重复的案例,然后黑客加载文本或用调试器运行它将是有意义的。

我在一个更简单的专用文件上尝试loadtxt,或者在问题文件的一部分上尝试它。我也尝试genfromtxt。在大多数情况下,它与加载一样,但采用了一种完全不同的方法,它可以绕过loadtxt的问题。

答案 1 :(得分:-1)

我不完全确定,但序列会引用x,y,c。而数组是文件。如果你真的需要三个变量与文件,我会分别给他们的价值      x = np.loadtext('finaltheta.txt')
y = np.loadtext('finaltheta.txt')
c = np.loadtext('finaltheta.txt')
您必须将其拆分才能使其正常工作。