print "hello"
hello
4 + 5
9
3.5 + 'e'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-be67659bb7b8> in <module>() ----> 1 3.5 + 'e' TypeError: unsupported operand type(s) for +: 'float' and 'str'
a = [1,2,3,4,5]
a[0]
1
a[0] + a[1]
3
range(5)
[0, 1, 2, 3, 4]
a = [0, 1]
for i in range(20):
a += [ a[-1] + a[-2] ]
print a
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]
range(20)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[a[i+1]/a[i+2] for i in range(20)]
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[a[i+1]/float(a[i+2]) for i in range(20)]
[1.0, 0.5, 0.6666666666666666, 0.6, 0.625, 0.6153846153846154, 0.6190476190476191, 0.6176470588235294, 0.6181818181818182, 0.6179775280898876, 0.6180555555555556, 0.6180257510729614, 0.6180371352785146, 0.6180327868852459, 0.6180344478216818, 0.6180338134001252, 0.6180340557275542, 0.6180339631667066, 0.6180339985218034, 0.618033985017358]
0 in a
True
0.5 in a
False
b = [a, 2, 3] * 3
b
[[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3, [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3, [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3]
a[0] = 1
a
[1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]
b
[[1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3, [1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3, [1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946], 2, 3]
len(a)
22
max(a), min(a)
(10946, 1)
type(a), type(a[0])
(list, int)
dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
a.append(3)
a[-1]
3
def func(e):
return e
a.append(func)
a
[1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 3, <function __main__.func>]
a[-1](10), a[-1]('hello')
(10, 'hello')
a.count(1)
3
a.reverse()
a[2:]
[6765, 4181, 2584, 1597, 987, 610, 377, 233, 144, 89, 55, 34, 21, 13, 8, 5, 3, 3, 2, 1, 1, 1]
a.sort()
a
[1, 1, 1, 2, 3, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, <function __main__.func>]
a.index(3)
4
a.count(3)
2
a[2:-5]
[1, 2, 3, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]
a[2::2] # Third number in slice is element jump (useful for deinterleaving!)
[1, 3, 5, 13, 34, 89, 233, 610, 1597, 4181, 10946]
name = 'andres'
surname = "cabrera"
name + ' ' + surname
'andres cabrera'
_.capitalize()
'Andres cabrera'
__.title()
'Andres Cabrera'
___.upper()
'ANDRES CABRERA'
fullname = __
fullname.count('A'), fullname.isalpha(), fullname.startswith('A')
(1, False, True)
fullname.title().split()
['Andres', 'Cabrera']
' '.join([name, surname])
'andres cabrera'
fullname.replace('A', 'a')
'andres Cabrera'
fullname
'Andres Cabrera'
fullname = ("%s %s"%(name, surname)).title()
print fullname
Andres Cabrera
'90'.zfill(4)
'0090'
'90'.center(4)
' 90 '
(1 + 1) == 3
False
e = 3 == 4
not e
True
d = {'name': 'andres', 'surname': 'cabrera'}
fullname = "%s %s"%(d['name'], d['surname'])
fullname.title()
'Andres Cabrera'
d = { 1: 'hello'}
Scope is defined by indentation, not special characters!
def myadd(first, second):
return first + second
myadd(3,4)
7
myadd('a', 'b')
'ab'
myadd(3, 'a')
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-77-ca4c820fcd8d> in <module>() ----> 1 myadd(3, 'a') <ipython-input-74-3079d74ac632> in myadd(first, second) 1 def myadd(first, second): ----> 2 return first + second TypeError: unsupported operand type(s) for +: 'int' and 'str'
a = [0, 1]
for i in range(20):
a += [ a[-1] + a[-2] ]
a = [0, 1]
while a[-1] < 1000:
a.append(a[-1] + a[-2])
a
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]
d = {'name': 'andres', 'surname': 'cabrera'}
for key in d:
print "%s:%s"%(key, d[key])
surname:cabrera name:andres
for char in name:
print char,
a n d r e s
str?
name.center?
Or use the tab key to display pop-up help (in notebook only)
help(str)
Help on class str in module __builtin__: class str(basestring) | str(object='') -> string | | Return a nice string representation of the object. | If the argument is a string, the return value is the same object. | | Method resolution order: | str | basestring | object | | Methods defined here: | | __add__(...) | x.__add__(y) <==> x+y | | __contains__(...) | x.__contains__(y) <==> y in x | | __eq__(...) | x.__eq__(y) <==> x==y | | __format__(...) | S.__format__(format_spec) -> string | | Return a formatted version of S as described by format_spec. | | __ge__(...) | x.__ge__(y) <==> x>=y | | __getattribute__(...) | x.__getattribute__('name') <==> x.name | | __getitem__(...) | x.__getitem__(y) <==> x[y] | | __getnewargs__(...) | | __getslice__(...) | x.__getslice__(i, j) <==> x[i:j] | | Use of negative indices is not supported. | | __gt__(...) | x.__gt__(y) <==> x>y | | __hash__(...) | x.__hash__() <==> hash(x) | | __le__(...) | x.__le__(y) <==> x<=y | | __len__(...) | x.__len__() <==> len(x) | | __lt__(...) | x.__lt__(y) <==> x<y | | __mod__(...) | x.__mod__(y) <==> x%y | | __mul__(...) | x.__mul__(n) <==> x*n | | __ne__(...) | x.__ne__(y) <==> x!=y | | __repr__(...) | x.__repr__() <==> repr(x) | | __rmod__(...) | x.__rmod__(y) <==> y%x | | __rmul__(...) | x.__rmul__(n) <==> n*x | | __sizeof__(...) | S.__sizeof__() -> size of S in memory, in bytes | | __str__(...) | x.__str__() <==> str(x) | | capitalize(...) | S.capitalize() -> string | | Return a copy of the string S with only its first character | capitalized. | | center(...) | S.center(width[, fillchar]) -> string | | Return S centered in a string of length width. Padding is | done using the specified fill character (default is a space) | | count(...) | S.count(sub[, start[, end]]) -> int | | Return the number of non-overlapping occurrences of substring sub in | string S[start:end]. Optional arguments start and end are interpreted | as in slice notation. | | decode(...) | S.decode([encoding[,errors]]) -> object | | Decodes S using the codec registered for encoding. encoding defaults | to the default encoding. errors may be given to set a different error | handling scheme. Default is 'strict' meaning that encoding errors raise | a UnicodeDecodeError. Other possible values are 'ignore' and 'replace' | as well as any other name registered with codecs.register_error that is | able to handle UnicodeDecodeErrors. | | encode(...) | S.encode([encoding[,errors]]) -> object | | Encodes S using the codec registered for encoding. encoding defaults | to the default encoding. errors may be given to set a different error | handling scheme. Default is 'strict' meaning that encoding errors raise | a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and | 'xmlcharrefreplace' as well as any other name registered with | codecs.register_error that is able to handle UnicodeEncodeErrors. | | endswith(...) | S.endswith(suffix[, start[, end]]) -> bool | | Return True if S ends with the specified suffix, False otherwise. | With optional start, test S beginning at that position. | With optional end, stop comparing S at that position. | suffix can also be a tuple of strings to try. | | expandtabs(...) | S.expandtabs([tabsize]) -> string | | Return a copy of S where all tab characters are expanded using spaces. | If tabsize is not given, a tab size of 8 characters is assumed. | | find(...) | S.find(sub [,start [,end]]) -> int | | Return the lowest index in S where substring sub is found, | such that sub is contained within S[start:end]. Optional | arguments start and end are interpreted as in slice notation. | | Return -1 on failure. | | format(...) | S.format(*args, **kwargs) -> string | | Return a formatted version of S, using substitutions from args and kwargs. | The substitutions are identified by braces ('{' and '}'). | | index(...) | S.index(sub [,start [,end]]) -> int | | Like S.find() but raise ValueError when the substring is not found. | | isalnum(...) | S.isalnum() -> bool | | Return True if all characters in S are alphanumeric | and there is at least one character in S, False otherwise. | | isalpha(...) | S.isalpha() -> bool | | Return True if all characters in S are alphabetic | and there is at least one character in S, False otherwise. | | isdigit(...) | S.isdigit() -> bool | | Return True if all characters in S are digits | and there is at least one character in S, False otherwise. | | islower(...) | S.islower() -> bool | | Return True if all cased characters in S are lowercase and there is | at least one cased character in S, False otherwise. | | isspace(...) | S.isspace() -> bool | | Return True if all characters in S are whitespace | and there is at least one character in S, False otherwise. | | istitle(...) | S.istitle() -> bool | | Return True if S is a titlecased string and there is at least one | character in S, i.e. uppercase characters may only follow uncased | characters and lowercase characters only cased ones. Return False | otherwise. | | isupper(...) | S.isupper() -> bool | | Return True if all cased characters in S are uppercase and there is | at least one cased character in S, False otherwise. | | join(...) | S.join(iterable) -> string | | Return a string which is the concatenation of the strings in the | iterable. The separator between elements is S. | | ljust(...) | S.ljust(width[, fillchar]) -> string | | Return S left-justified in a string of length width. Padding is | done using the specified fill character (default is a space). | | lower(...) | S.lower() -> string | | Return a copy of the string S converted to lowercase. | | lstrip(...) | S.lstrip([chars]) -> string or unicode | | Return a copy of the string S with leading whitespace removed. | If chars is given and not None, remove characters in chars instead. | If chars is unicode, S will be converted to unicode before stripping | | partition(...) | S.partition(sep) -> (head, sep, tail) | | Search for the separator sep in S, and return the part before it, | the separator itself, and the part after it. If the separator is not | found, return S and two empty strings. | | replace(...) | S.replace(old, new[, count]) -> string | | Return a copy of string S with all occurrences of substring | old replaced by new. If the optional argument count is | given, only the first count occurrences are replaced. | | rfind(...) | S.rfind(sub [,start [,end]]) -> int | | Return the highest index in S where substring sub is found, | such that sub is contained within S[start:end]. Optional | arguments start and end are interpreted as in slice notation. | | Return -1 on failure. | | rindex(...) | S.rindex(sub [,start [,end]]) -> int | | Like S.rfind() but raise ValueError when the substring is not found. | | rjust(...) | S.rjust(width[, fillchar]) -> string | | Return S right-justified in a string of length width. Padding is | done using the specified fill character (default is a space) | | rpartition(...) | S.rpartition(sep) -> (head, sep, tail) | | Search for the separator sep in S, starting at the end of S, and return | the part before it, the separator itself, and the part after it. If the | separator is not found, return two empty strings and S. | | rsplit(...) | S.rsplit([sep [,maxsplit]]) -> list of strings | | Return a list of the words in the string S, using sep as the | delimiter string, starting at the end of the string and working | to the front. If maxsplit is given, at most maxsplit splits are | done. If sep is not specified or is None, any whitespace string | is a separator. | | rstrip(...) | S.rstrip([chars]) -> string or unicode | | Return a copy of the string S with trailing whitespace removed. | If chars is given and not None, remove characters in chars instead. | If chars is unicode, S will be converted to unicode before stripping | | split(...) | S.split([sep [,maxsplit]]) -> list of strings | | Return a list of the words in the string S, using sep as the | delimiter string. If maxsplit is given, at most maxsplit | splits are done. If sep is not specified or is None, any | whitespace string is a separator and empty strings are removed | from the result. | | splitlines(...) | S.splitlines(keepends=False) -> list of strings | | Return a list of the lines in S, breaking at line boundaries. | Line breaks are not included in the resulting list unless keepends | is given and true. | | startswith(...) | S.startswith(prefix[, start[, end]]) -> bool | | Return True if S starts with the specified prefix, False otherwise. | With optional start, test S beginning at that position. | With optional end, stop comparing S at that position. | prefix can also be a tuple of strings to try. | | strip(...) | S.strip([chars]) -> string or unicode | | Return a copy of the string S with leading and trailing | whitespace removed. | If chars is given and not None, remove characters in chars instead. | If chars is unicode, S will be converted to unicode before stripping | | swapcase(...) | S.swapcase() -> string | | Return a copy of the string S with uppercase characters | converted to lowercase and vice versa. | | title(...) | S.title() -> string | | Return a titlecased version of S, i.e. words start with uppercase | characters, all remaining cased characters have lowercase. | | translate(...) | S.translate(table [,deletechars]) -> string | | Return a copy of the string S, where all characters occurring | in the optional argument deletechars are removed, and the | remaining characters have been mapped through the given | translation table, which must be a string of length 256 or None. | If the table argument is None, no translation is applied and | the operation simply removes the characters in deletechars. | | upper(...) | S.upper() -> string | | Return a copy of the string S converted to uppercase. | | zfill(...) | S.zfill(width) -> string | | Pad a numeric string S with zeros on the left, to fill a field | of the specified width. The string S is never truncated. | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | __new__ = <built-in method __new__ of type object> | T.__new__(S, ...) -> a new object with type S, a subtype of T
import glob
The Python Standard Library: http://docs.python.org/3/library/
Documentation for the glob module: http://docs.python.org/3/library/glob.html
glob.glob("*")
['passport.wav', 'wtk1-prelude1.mid', 'Graphing with pylab.ipynb', 'Python Basics.ipynb', 'Audio FIle IO.ipynb', 'Symbolic MIR Using Music21.ipynb']
glob.glob("/home/andres/Music/*")
['/home/andres/Music/Jose Vicente Asuar', '/home/andres/Music/Ambisonics', '/home/andres/Music/Unknown Artist']
glob.glob("/home/andres/Music/*/*/*")
['/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/05. Catedral.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/02. Preludio La Noche.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/08. La Noche II.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/07. Caleidoscopio.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/03. Serenata para mi voz y sonidos sinusoidales.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/06. Divertimento.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/01. Variaciones espctrales (1959).flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/04. Estudio Aleatorio.flac', '/home/andres/Music/Ambisonics/Brahma/05-Music_W-110425_0127.wav', '/home/andres/Music/Ambisonics/Brahma/03-Birds_Y-110425_0119.wav', '/home/andres/Music/Ambisonics/Brahma/07-Music_Y-110425_0127.wav', '/home/andres/Music/Ambisonics/Brahma/06-Music_X-110425_0127.wav', '/home/andres/Music/Ambisonics/Brahma/08-Music_Z-110425_0127.wav', '/home/andres/Music/Ambisonics/Brahma/04-Birds_Z-110425_0119.wav', '/home/andres/Music/Ambisonics/Ambisonia/NJNight.amb', '/home/andres/Music/Ambisonics/Ambisonia/PWH_Purcell-Your_hay_it_is_mowed.amb', '/home/andres/Music/Ambisonics/Ambisonia/Handel-Zadok.amb', '/home/andres/Music/Ambisonics/Ambisonia/AF_Orfeo_Barocco_REC2.amb', '/home/andres/Music/Ambisonics/Ambisonia/dc_variations_himmelreich.amb', '/home/andres/Music/Ambisonics/Ambisonia/cv_Badlands_Day_Insects.amb', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/30. Track 30.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/29. Track 29.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/06. Track 6.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/24. Track 24.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/01. Track 1.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/10. Track 10.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/15. Track 15.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/28. Track 28.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/17. Track 17.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/19. Track 19.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/12. Track 12.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/09. Track 9.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/20. Track 20.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/21. Track 21.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/22. Track 22.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/04. Track 4.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/02. Track 2.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/11. Track 11.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/13. Track 13.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/23. Track 23.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/27. Track 27.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/18. Track 18.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/05. Track 5.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/07. Track 7.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/List.jpg', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/26. Track 26.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/03. Track 3.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/16. Track 16.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/08. Track 8.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/25. Track 25.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/14. Track 14.flac']
glob.glob("/home/andres/Music/*/*/*.flac")
['/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/05. Catedral.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/02. Preludio La Noche.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/08. La Noche II.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/07. Caleidoscopio.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/03. Serenata para mi voz y sonidos sinusoidales.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/06. Divertimento.flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/01. Variaciones espctrales (1959).flac', '/home/andres/Music/Jose Vicente Asuar/Obra Electroacustica I/04. Estudio Aleatorio.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/30. Track 30.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/29. Track 29.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/06. Track 6.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/24. Track 24.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/01. Track 1.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/10. Track 10.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/15. Track 15.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/28. Track 28.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/17. Track 17.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/19. Track 19.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/12. Track 12.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/09. Track 9.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/20. Track 20.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/21. Track 21.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/22. Track 22.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/04. Track 4.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/02. Track 2.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/11. Track 11.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/13. Track 13.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/23. Track 23.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/27. Track 27.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/18. Track 18.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/05. Track 5.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/07. Track 7.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/26. Track 26.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/03. Track 3.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/16. Track 16.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/08. Track 8.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/25. Track 25.flac', '/home/andres/Music/Unknown Artist/Taxonomy of synthesis techniques (Roads)/14. Track 14.flac']
from random import random
random()
0.13353914828109292
from os import chdir
chdir("/home/andres/Music")
from os import *
listdir('.')
['Jose Vicente Asuar', 'Ambisonics', 'Unknown Artist']
Importing whole modules into the global namespace is not generally recommended although it can be very convenient
f = open('/home/andres/Desktop/IO_Test.csd', 'r')
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-103-44828fda2b25> in <module>() ----> 1 f = open('/home/andres/Desktop/IO_Test.csd', 'r') TypeError: an integer is required
open
<function posix.open>
help(open)
Help on built-in function open in module posix: open(...) open(filename, flag [, mode=0777]) -> fd Open a file (for low level IO).
del open # yes! Importing a whole module to the global namespace can be bad!!
open
<function open>
f = open('/home/andres/Desktop/IO_Test.csd', 'r')
lines = f.readlines()
lines[:10]
['<CsoundSynthesizer>\n', '<CsOptions>\n', '</CsOptions>\n', '<CsInstruments>\n', '\n', 'sr = 48000\n', 'ksmps = 128\n', 'nchnls = 2\n', '0dbfs = 1\n', '\n']
f.close()
f = open('/home/andres/Desktop/test.txt','w')
f.write(fullname)
f.close()
f = open('/home/andres/Desktop/test.txt', 'r')
f.read()
'andres cabrera'
If you have run ipython with the --pylab option, many numpy and scipy modules and functions are already available.
You can active this with the ipython "magic" command:
%pylab
Otherwise, on a regular Python shell, use:
import numpy as np
from pylab import *
linspace(0, 1, 10)
array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444, 0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
linspace(0,1, 10, endpoint=False)
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
ones(10)
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
ones([2,2])
array([[ 1., 1.], [ 1., 1.]])
arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
You can also create arrays from a "generator" function:
def f(x,y):
return 10 * x + y
fromfunction(f, (5, 4), dtype= int)
array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
arr = fromfunction(f, (5, 4), dtype= int)
arr * 2
array([[ 0, 2, 4, 6], [20, 22, 24, 26], [40, 42, 44, 46], [60, 62, 64, 66], [80, 82, 84, 86]])
arr
array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
arr * [3,4,5,6]
array([[ 0, 4, 10, 18], [ 30, 44, 60, 78], [ 60, 84, 110, 138], [ 90, 124, 160, 198], [120, 164, 210, 258]])
dot(arr, [3,4,5,6])
array([ 32, 212, 392, 572, 752])
dot(arr, arr.T)
array([[ 14, 74, 134, 194, 254], [ 74, 534, 994, 1454, 1914], [ 134, 994, 1854, 2714, 3574], [ 194, 1454, 2714, 3974, 5234], [ 254, 1914, 3574, 5234, 6894]])
c_[arr, [2,3,4,5,6]]
array([[11, 1, 2, 3, 2], [10, 11, 12, 13, 3], [20, 21, 22, 23, 4], [30, 31, 32, 33, 5], [40, 41, 42, 43, 6]])
r_[arr, arr*2]
array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43], [ 0, 2, 4, 6], [20, 22, 24, 26], [40, 42, 44, 46], [60, 62, 64, 66], [80, 82, 84, 86]])
r_[arr, [2,3,4,5]]
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-145-f0d2f75d3211> in <module>() ----> 1 r_[arr, [2,3,4,5]] /usr/lib/python2.7/dist-packages/numpy/lib/index_tricks.pyc in __getitem__(self, key) 321 objs[k] = objs[k].astype(final_dtype) 322 --> 323 res = _nx.concatenate(tuple(objs),axis=self.axis) 324 return self._retval(res) 325 ValueError: all the input arrays must have same number of dimensions
Python lists are interpreted as column vectors!
np.array([2,3,4,5,6])
array([2, 3, 4, 5, 6])
r_[arr, np.array([2,3,4,5,6])]
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-147-ad7a15d2aee0> in <module>() ----> 1 r_[arr, np.array([2,3,4,5,6])] /usr/lib/python2.7/dist-packages/numpy/lib/index_tricks.pyc in __getitem__(self, key) 321 objs[k] = objs[k].astype(final_dtype) 322 --> 323 res = _nx.concatenate(tuple(objs),axis=self.axis) 324 return self._retval(res) 325 ValueError: all the input arrays must have same number of dimensions
And so are 1D arrays!
np.array([2,3,4,5,6], ndmin = 2)
array([[2, 3, 4, 5, 6]])
np.array([2,3,4,5,6], ndmin = 2).T
array([[2], [3], [4], [5], [6]])
r_[arr, np.array([2,3,4,5], ndmin = 2)]
array([[11, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43], [ 2, 3, 4, 5]])
But a 2D array with a single line is a row!
arr.shape
(5, 4)
arr.ndim
2
arr.dtype
dtype('int64')
arr.size
20
Too many to name here but for example:
sin(arr)
array([[-0.99999021, 0.84147098, 0.90929743, 0.14112001], [-0.54402111, -0.99999021, -0.53657292, 0.42016704], [ 0.91294525, 0.83665564, -0.00885131, -0.8462204 ], [-0.98803162, -0.40403765, 0.55142668, 0.99991186], [ 0.74511316, -0.15862267, -0.91652155, -0.83177474]])
sum(arr)
441
mean(arr), median(arr), arr.max(), arr.min()
(22.050000000000001, 21.5, 43, 1)
for row in arr:
print row
[11 1 2 3] [10 11 12 13] [20 21 22 23] [30 31 32 33] [40 41 42 43]
for element in arr.flat:
print element,
11 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43
c = arr.view()
c
array([[11, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
c is arr
False
c.base is arr
True
c.flags.owndata
False
c.shape = [2, 10]
c
array([[11, 1, 2, 3, 99, 11, 12, 13, 20, 21], [22, 23, 30, 31, 32, 33, 40, 41, 42, 43]])
arr
array([[11, 1, 2, 3], [99, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
c[0,4] = 99
c, arr
(array([[11, 1, 2, 3, 99, 11, 12, 13, 20, 21], [22, 23, 30, 31, 32, 33, 40, 41, 42, 43]]), array([[11, 1, 2, 3], [99, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]]))
To make a deep (independent) copy:
d = arr.copy()
d[:] = 10
d
array([[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]])
arr
array([[11, 1, 2, 3], [99, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
plot(a)
[<matplotlib.lines.Line2D at 0x45cccd0>]
Great tutorial: http://scipy-lectures.github.io/intro/language/python_language.html
Another more in depth tutorial: http://nbviewer.ipython.org/gist/rpmuller/5920182
By: Andrés Cabrera mantaraya36@gmail.com
For course MAT 240E at UCSB
This ipython notebook is licensed under the CC-BY-NC-SA license: http://creativecommons.org/licenses/by-nc-sa/4.0/