将两个列表作为数组的操作

时间:2019-06-18 13:09:06

标签: numpy

我需要对两个列表XY进行操作,因此必须将它们转换为数组,可以使用以下数组进行操作:

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。我只希望有地板和房间。)

我如何生产XY

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]])

其中GJ是矩阵,具有相同的列数(mags)和不同的行数。如何遍历长度不同的列?

1 个答案:

答案 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[][][]的列表。

对于第二个问题,看来您做得对。如果您的数据具有相同的形状,那会更好,但是,如果不是这样,那几乎就是您所能做的。