我需要对两个列表X
和Y
进行操作,因此必须将它们转换为数组,可以使用以下数组进行操作:
M = [[] for i in range(len(mags))]
for i in range(len(a)):
for j in range(len(b)):
M[i].append([np.array(X[i][j]) - np.array(Y[i][j])])
现在,我希望获得M
的数组,该数组是a
乘以b
矩阵。但是,我对操作产生的数据嵌套感到困惑。 M
的元素现在是list-list-array-float64(M[][][][]
)。我期望有一个列表列表,即M[][]
,我可以在一个简单的循环函数中访问(绘制):
x = M ; Y = N
for i in range(len(M)):
plt.scatter(x[i], y[i])
其中N
是列表列表。
如何简单地以列表列表的形式获取M
?
(当然,只要减去就可以生成众所周知的消息unsupported operand type(s) for -: 'list' and 'list'
)
(我在某处读到了这种数据层次结构的类比作为邮政地址:
M[2][13][7][85]
的意思是街道2
,街区13
,楼层7
,房间85
。我只希望有地板和房间。)
我如何生产X
和Y
:
X = [[] for i in range(len(mags))]
for i in range(len(mags)):
for j in range(len(G[i])):
X[i].append([G[i][j] - J[i][j]])
其中G
和J
是矩阵,具有相同的列数(mags
)和不同的行数。如何遍历长度不同的列?
答案 0 :(得分:0)
您的问题是,通过在下面的代码段中添加额外的括号,您将创建超出必要数量的列表:
M = [[] for i in range(len(mags))]
for i in range(len(a)):
for j in range(len(b)):
M[i].append([np.array(X[i][j]) - np.array(Y[i][j])])
如果您仅更改为:
M[i].append(np.array(X[i][j]) - np.array(Y[i][j]))
应该可以解决您的问题。
结果仍将深入三个层次,但是由于您要存储的M
的元素是浮点数列表M[][][]
的列表。
对于第二个问题,看来您做得对。如果您的数据具有相同的形状,那会更好,但是,如果不是这样,那几乎就是您所能做的。