使用多维数组中的每个第一个元素

时间:2015-04-29 04:07:42

标签: python arrays list multidimensional-array slice

我原以为如果你运行了print mdarray[::][1],你就会打印出数组中每个元素的第一个子元素。我在哪里出错了?

我特别需要这个p.plot(x,y[::][1]),我肯定想要使用for循环,因为它非常慢,除非我让事情变得混乱。< / p>

我错了什么?谢谢!

修改

我仍然不知道我在哪里得到[::]但是我用

解决了我的问题

p.plot(x,c[:,1],color='g',label="Closing value")

p.plot(x,[i[1] for i in c],color='g',label="Closing value")

似乎没有任何明显的时间差异,所以我想我会使用第二个,因为它看起来更加pythonic /可读。或者我错过了什么?

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

如果mdarray是一个numpy数组,您可以使用mdarray[:,0]

访问它的第一列
In [8]: mdarray = np.array([[1, 2, 4], [4, 5, 6], [7, 8, 9]])

In [9]: mdarray
Out[9]:
array([[1, 2, 4],
       [4, 5, 6],
       [7, 8, 9]])

In [10]: mdarray[:,0]
Out[10]: array([1, 4, 7])

<强> UPD

快速而肮脏的测试

In [28]: mdarray = np.zeros((10000,10000))

In [29]: %timeit -n1000 [x[0] for x in mdarray]
1000 loops, best of 3: 2.7 ms per loop

In [30]: %timeit -n1000 mdarray[:,0]
1000 loops, best of 3: 567 ns per loop

答案 1 :(得分:0)

怎么样:

>>> Matrix = [[x for x in range(5)] for x in range(5)]
>>> Matrix
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> [item[0] for item in Matrix]
[0, 0, 0, 0, 0]

至于::,您可以阅读更多相关内容here,它会返回相同的列表。

答案 2 :(得分:0)

你做了什么:

您使用了mdarray[::]。这是mdarray的(浅)副本。然后,您使用[1]访问了它的第二个元素。 [0]将是第一个。

你可以做的是列表理解:

[item[0] for item in mdarray]

这将返回mdarray中列表的第一个元素列表。

谈论循环:一次(一次)循环对访问某些东西非常有效。在内部,所有魔术函数(如上面的理解)都在迭代数据。

答案 3 :(得分:-1)

不确定您是使用数组还是列表,而是使用Python的列表:

Python 2:

>>> mdarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> zip(*mdarray)[0]
(1, 4, 7)

Python 3:

>>> mdarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list(zip(*mdarray))[0]
(1, 4, 7)

或者对于索引0的特殊情况:

>>> mdarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> next(zip(*mdarray))
(1, 4, 7)