
Scipy Lecture Notes – Learn numerics, science, and data with Python - kercker
http://www.scipy-lectures.org/
======
tomrod
This is a great first start. Some resources the author may consider drawing
upon, depending on whether and how they choose to expand:

[1] [http://quant-econ.net/py/index.html](http://quant-econ.net/py/index.html)

[2]
[http://people.duke.edu/~ccc14/sta-663/](http://people.duke.edu/~ccc14/sta-663/)

------
Dawny33
One doc to learn them all :)

The `Optimizing and debugging code` part is where most data scientists falter.

So, this is a really nice effort for bringing it all together!

------
cjf4
I wish I had this when I was learning the Python data analysis ecosystem. Does
a nice job of clearly distinguishing the differences of the major elements.

------
KKKKkkkk1
I hope you don't take this as trolling, but: What's the deal with matrix
multiplication in numpy? I wanted to dot-product two vectors yesterday, and I
got it right only on the third try:

    
    
       x.T * y    # nope
       x.dot(y)   # still no
       x.inner(y) # ok
    

This is a disaster. I'm sure there are valid historical reasons for this state
of affairs, but this makes numpy an environment where random idiosyncrasies
get cast in concrete.

~~~
jofer
It's not historical. It's conceptual and deliberate (and far less confusing
than the alternative, i.m.o.).

What's likely happening is that you're using a 1D array and a 2D array. If
they were both actually vectors, `x.dot(y)` would work fine.

For example:

    
    
        import numpy as np
        x = y = np.arange(10)
        x.dot(y) # Yields 285
    

However, your problem is likely that one's a vector and one's a 2D array.
Matlab doesn't actually have vectors at all, so this distinction confuses a
lot of people. A row vector and a column vector are both 2D and aren't
actually vectors at all. You can transpose them and swap the dimensions. When
you transpose a vector in numpy, you still get a 1D vector. Transposing
doesn't change the number of dimensions (To me it would be _incredibly_
confusing if it did...).

So, in your case, you probably had something like:

    
    
        import numpy as np
        x = np.arange(10)
        y = x[np.newaxis, :]
        x.dot(y) # Raises a ValueError
    

Note that the opposite (`y.dot(x)`) would have worked fine in this case, as
well as `np.inner`.

`np.dot` uses the last dimension of the first array (10) and the second-to-
last dimension of the other array (1). They don't match. It's that simple.

You might have also been trying to take the dot product of two 2D arrays with
the same dimension. In that case, the same thing happens. The last dimension
of one doesn't match the second-to-last dimension of the other.

~~~
tomrod
Very thorough explanation!

------
Feneric
This looks like a great document to help one get started on the road to using
Python for lots of STEM type tasks. Pandas fans: don't be put off by the lack
of mention of it on the title page, as it is covered in there, too.

------
tsaprailis
Look like it's covering both Python 2 & 3\. Good job.

~~~
goatlover
Is Python 2 going to be kept alive forever and ever? Is there any other
language on the planet that keeps a previous version supported years after a
major release came out?

~~~
adrianN
C, C++, Java... I wonder whether there are languages that are used to make
money that don't provide backwards compatibility.

------
icalc
Good job

