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'。