2014-09-03 143 views
0

我有一个numpy数组,rank = 4。假设它看起来像这样:Numpy多维数组和反向访问

np.shape(my_array) 
(10,5,25,50) 

我也有10个值的列表,如

x = np.arange(10) 

我希望能够绘制x反对my_array第一轴的每一个值,也就是说,我想这样做:

for axis2_index in xrange(5): 
    for axis3_index in xrange(25): 
     for axis4_index in xrange(50): 
      plt.plot(x,my_array[:,axis2_index,axis3_index,axis4_index]) 

但当然,我想要做的是,在一个numpy的形式,没有for循环。我一直在为此苦苦挣扎,但仍然找不到任何简单的方法来做到这一点。换句话说,我希望能够访问my_array,例如,我可以得到一个5×25×50的10个矢量阵列,这些矢量对应于第一个轴my_array。我也尝试过np.reshape,但它改变了元素的顺序,使我无法使用它。

+0

这不是一个很大数量的行吗?在这种情况下,您不必担心for循环的速度,而是渲染速度。但是,我建议你查看'np.broadcast_arrays'。 – mdurant 2014-09-03 18:56:17

+0

谢谢@mdurant。这只是一个例子,我实际上想要做一些计算和访问所有这些数字:它们是在3个不同参数的网格上计算函数的结果,额外的维度是函数的输出,本身就是一个数组(一个谱)。我已经检查过'np.broadcast_arrays',但仍然无法看到我可以如何使用..任何带有类似情况的教程,我都可以看看?对于我来说,如何做到这一点,numpy doc是不够的。 – 2014-09-03 19:34:05

回答

0

下面是使用广播一个简单的例子:

y = randn(10,4) 
x = arange(10) 

plot(x[:,None],y) 

我在你的情况下猜你会x[:,None,None,None]

+0

这是我最初的尝试,当你提到广播时,但出现以下错误:'ValueError:x和y不能大于2-D'。 – 2014-09-03 19:52:47

+0

对不起,你是对的 - 我会尽快给你回复。您必须重塑为2d:第一个维度是独立轴,其余维度是所有其他参数。 – mdurant 2014-09-03 20:13:32

+0

我设法通过一个复杂的命令来实现它:'my_array.transpose()。reshape(5 * 25 * 50,10)',然后简单地将每个元素与'x'对应。但是,这损失了每个模型的坐标(param1,param2和param3)值的信息,我认为这并不是很有用...... – 2014-09-04 00:22:22