我正在尝试使用另一个名为mean_data的数组中的数据创建3个numpy数组/列表,如下所示:
---> 39 R = np.array(mean_data[:,0])
40 P = np.array(mean_data[:,1])
41 Z = np.array(mean_data[:,2])
当我尝试运行程序时,我得到错误:
TypeError: list indices must be integers, not tuple
平均值数据列表看起来像这个示例。。。
[6.0, 315.0, 4.8123788544375692e-06],
[6.5, 0.0, 2.259217450023793e-06],
[6.5, 45.0, 9.2823565008402673e-06],
[6.5, 90.0, 8.309270169336028e-06],
[6.5, 135.0, 6.4709418114245381e-05],
[6.5, 180.0, 1.7227922423558414e-05],
[6.5, 225.0, 1.2308522579848724e-05],
[6.5, 270.0, 2.6905672894824344e-05],
[6.5, 315.0, 2.2727114437176048e-05]]
我不知道如何防止这个错误,我试着创建一个np.array的mean_数据,并使用np.append向它添加值,但这也不能解决问题。
这是回溯(以前用过ipython)
Traceback (most recent call last):
File "polarplot.py", line 36, in <module>
R = np.array(mean_data[:,0])
TypeError: list indices must be integers, not tuple
另一种创建数组的方法是:
mean_data = np.array([])
for ur, ua in it.product(uradius, uangle):
samepoints = (data[:,0]==ur) & (data[:,1]==ua)
if samepoints.sum() > 1: # check if there is more than one match
np.append(mean_data[ur, ua, np.mean(data[samepoints,-1])])
elif samepoints.sum() == 1:
np.append(mean_data, [ur, ua, data[samepoints,-1]])
其回溯是:
IndexError Traceback (most recent call last)
<ipython-input-3-5268bc25e75e> in <module>()
31 samepoints = (data[:,0]==ur) & (data[:,1]==ua)
32 if samepoints.sum() > 1: # check if there is more than one match
---> 33 np.append(mean_data[ur, ua, np.mean(data[samepoints,-1])])
34 elif samepoints.sum() == 1:
35 np.append(mean_data, [ur, ua, data[samepoints,-1]])
IndexError: invalid index
编辑
出现
invalid index
错误的原因是mean_data
和要添加的值之间缺少逗号。另外,np.append返回数组的副本,并且不会更改原始数组。从文档中:
因此,您必须将
np.append
结果分配给数组(我认为可能是mean_data
本身)、和,因为您不需要展平数组,所以还必须指定要附加的轴。考虑到这一点,我想你可以试试
一定要看看双数组
[[
和]]
:我认为它们是必要的,因为两个数组必须具有相同的形状。您可能不需要制作列表并附加它们来制作数组。您可以一次完成所有操作,这会更快,因为您可以使用numpy来完成循环,而不是使用纯python自己完成循环。
要回答您的问题,正如其他人所说的,您不能像以前那样访问带有两个索引的嵌套列表。如果在尝试切片之前或之后将
mean_data
转换为数组,则可以:而不是
但是,假设平均数据有一个形状
nx3
,而不是你可以简单地
它在第
0
轴上平均,并返回一个长度-n
数组但就我最初的观点而言,我将编造一些数据,试图说明如何在不构建任何列表的情况下做到这一点一次一个项目:
变量
mean_data
是一个嵌套列表,在Python中,访问嵌套列表不能通过多维切片来完成,即:mean_data[1,2]
,而是要写入mean_data[1][2]
。这是因为
mean_data[2]
是一个列表。进一步的索引是递归的,因为mean_data[2]
是一个列表,mean_data[2][0]
是该列表的第一个索引。另外,
mean_data[:][0]
不工作,因为mean_data[:]
返回mean_data
。解决方案是替换数组或导入原始数据,如下所示:
numpy数组(类似于MATLAB数组,不同于嵌套列表)支持元组的多维切片。
相关问题 更多 >
编程相关推荐