Numpy 以两个列表作为数组的操作

Numpy 以两个列表作为数组的操作,numpy,Numpy,我需要对两个列表执行一个操作,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

我需要对两个列表执行一个操作,
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
? (当然,简单的减法运算会产生众所周知的消息-:'list'和'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
是矩阵,它们都具有相同的列数(
mag
)和不同的行数。如何循环使用不同长度的列?

您的问题是,通过在以下代码段中添加额外的括号,您创建的列表超出了需要:

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


关于你的第二个问题,看起来你做得对。如果您的数据具有相同的形状会更好,但如果不是,这就是您所能做的一切。

什么是
mags
a
b
,“N”?你能让你的例子完全可执行吗?此外,通过附加列表,然后将其传递给
matplotlib
,可以将列表转换为数组,而不是将数组或列表传递给matplotlib。表演一定非常慢。请展示一些示例数据,我打赌我们可以将其转换为两行代码,性能很好。为什么不使用
M[I].append([X[I][j]-Y[I][j]])
np.array(…)
包装器的用途是什么?不要不必要地混合列表和数组。请给出
X
Y
的示例。我猜它们是一系列的列表,但你需要弄清楚。您可以使用它们生成2d数组,并跳过迭代(
M=np.array(X)-np.array(Y)
)。我确实尝试过简化代码,并强调了我对python处理任意两个数组的方式的怀疑。我省略了从csv中添加数据,因为这会使问题复杂化
a
b
只是我的表的维度。主要的问题是,为什么将两个列表(数组)相减会产生类似于
[[[array([1])]、[array([2])、…]、[[array([1])]、[array([2])、…]
的结果,而不仅仅是
[[1,2,…]、[1,2,…]
@hpaulj,因为我得到了不支持的操作数类型-:'list'和'list'。