使用多维数组中的每个第一个元素
Using every first element in a multidimensional array
我原以为,如果您 运行 或者 print mdarray[::][1]
,您将打印数组中每个元素的第一个子元素。我哪里做错了?
我特别需要这个用于 p.plot(x,y[::][1])
我肯定会 不想 想使用 for 循环,因为它非常慢,除非我得到东西困惑。
我哪里错了?谢谢!
编辑
我仍然不知道我从哪里得到 [::] 的东西,但我用
解决了我的问题
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/readable。还是我遗漏了什么?
感谢大家的帮助!
怎么样:
>>> 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,它将return相同的列表。
你做了什么:
您使用了 mdarray[::]
。这生成了 mdarray
的(浅)副本。然后您使用 [1]
访问了它的 second 元素。 [0]
将是第一个。
你可以做的是列表理解:
[item[0] for item in mdarray]
这将 return mdarray
中列表的第一个元素的列表。
谈论循环:(一次)循环对于访问某些东西是相当有效的。在内部,所有魔术函数(如上面的理解)都在迭代数据。
如果 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
不确定您使用的是数组还是列表,但是对于 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)
我原以为,如果您 运行 或者 print mdarray[::][1]
,您将打印数组中每个元素的第一个子元素。我哪里做错了?
我特别需要这个用于 p.plot(x,y[::][1])
我肯定会 不想 想使用 for 循环,因为它非常慢,除非我得到东西困惑。
我哪里错了?谢谢!
编辑
我仍然不知道我从哪里得到 [::] 的东西,但我用
解决了我的问题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/readable。还是我遗漏了什么?
感谢大家的帮助!
怎么样:
>>> 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,它将return相同的列表。
你做了什么:
您使用了 mdarray[::]
。这生成了 mdarray
的(浅)副本。然后您使用 [1]
访问了它的 second 元素。 [0]
将是第一个。
你可以做的是列表理解:
[item[0] for item in mdarray]
这将 return mdarray
中列表的第一个元素的列表。
谈论循环:(一次)循环对于访问某些东西是相当有效的。在内部,所有魔术函数(如上面的理解)都在迭代数据。
如果 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
不确定您使用的是数组还是列表,但是对于 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)