2014-01-08 58 views
3

我在通過Arduino發送的串行信息閱讀信息。這是正在讀一些示例數據:從Arduino到Python陣列的字符串列表

4 
1 
5 
2 
15 
1 

作爲一個以前的MATLAB用戶,我只是將能夠複製的值,因此像

a = PASTE 

得到的值的矢量。有沒有類似的方式來獲取在Python終端中的int數組或矩陣中的所有值(使用numpy和matplotlib進行進一步繪圖)?

感謝您的幫助。

+0

請詳細說明'a = PASTE'? – Dan

+0

對不起。我的意思是我可以將數據(如圖所示)複製到MATLAB中,例如「a = PASTECOMMAND」。當然,在MATLAB中,這將使矢量由數據組成。 – intl

+0

我想你會輸入'a = ['然後粘貼然後輸入']'然後按回車?所以我相信你可以用Python做到這一點?你在用什麼Python IDE? – Dan

回答

1

基本上,這個工程在Matlab因爲空間用於單獨項目的順序,和Matlab會讓你使用換行符代替空格。換句話說,你可以這樣做x = [1 2 3]

在Python中,用逗號代替。換句話說,你需要做x = [1, 2, 3]

Python將讓你在一個表達式換行,如果你打開一個括號/支架等。例如,你可以這樣做:

In [1]: x = [1, 
    ...: 2, 
    ...: 3, 
    ...: 4] 

In [2]: x 
Out[2]: [1, 2, 3, 4] 

...但你仍然需要它的逗號成爲有效的語法。

如果您想使用換行符作爲序列的分隔符(您大概已將其複製到剪貼板),則需要在新行上明確拆分字符串。

要啓動多行字符串,請使用三引號。 ("""'''

例如:(我已經輸入x = """然後打糊(如<ctrl>-v/<shift>-<ins> /其他))

In [1]: x = """4 
    ...: 1 
    ...: 5 
    ...: 2 
    ...: 15 
    ...: 1""" 

In [2]: x 
Out[2]: '4\n1\n5\n2\n15\n1' 

In [3]: x.split() 
Out[3]: ['4', '1', '5', '2', '15', '1'] 

In [4]: import numpy as np 

In [5]: np.array(x.split(), dtype=float) 
Out[5]: array([ 4., 1., 5., 2., 15., 1.]) 

而且,@HYRY提到的,如果你使用ipython,它會做的

In [1]: x = """4 
    ...: 1 
    ...: 5 
    ...: 2 
    ...: 15 
    ...: 1""" 

In [2]: x = x.split() 

相當於只需:

In [1]: %paste x 

更好的是,如果你從串口讀取數據,直接讀入python。看看pyserialhttp://pyserial.sourceforge.net/

3

如果您使用IPython中,您可以:

>>> import numpy as np 
>>> %paste x 
>>> x = np.array(x, int) 
+0

試過了,但得到這個錯誤:ValueError:無效的字面值long()與基10:'import numpy as np' – intl

+1

您需要將數據複製到剪貼板並在ipython控制檯中輸入'%paste x'。 – HYRY