In [1]:
import numpy as np

In [2]:
l_2d = [[0, 1, 2], [3, 4, 5]]
print(l_2d)


[[0, 1, 2], [3, 4, 5]]

In [3]:
print(type(l_2d))


<class 'list'>

In [4]:
arr = np.array([[0, 1, 2], [3, 4, 5]])
print(arr)


[[0 1 2]
 [3 4 5]]

In [5]:
print(type(arr))


<class 'numpy.ndarray'>

In [6]:
arr = np.arange(6)
print(arr)


[0 1 2 3 4 5]

In [7]:
arr = np.arange(6).reshape((2, 3))
print(arr)


[[0 1 2]
 [3 4 5]]

In [8]:
mat = np.matrix([[0, 1, 2], [3, 4, 5]])
print(mat)


[[0 1 2]
 [3 4 5]]

In [9]:
print(type(mat))


<class 'numpy.matrix'>

In [10]:
mat = np.matrix(arr)
print(mat)


[[0 1 2]
 [3 4 5]]

In [11]:
print(type(mat))


<class 'numpy.matrix'>

In [12]:
mat_1d = np.matrix([0, 1, 2])
print(mat_1d)


[[0 1 2]]

In [13]:
print(type(mat_1d))


<class 'numpy.matrix'>

In [14]:
print(mat_1d.shape)


(1, 3)

In [15]:
# mat_3d = np.matrix([[[0, 1, 2]]])
# ValueError: matrix must be 2-dimensional

In [16]:
print(l_2d)


[[0, 1, 2], [3, 4, 5]]

In [17]:
print(l_2d[0][1])


1

In [18]:
l_2d[0][1] = 100
print(l_2d)


[[0, 100, 2], [3, 4, 5]]

In [19]:
print(arr)


[[0 1 2]
 [3 4 5]]

In [20]:
print(arr[0, 1])


1

In [21]:
arr[0, 1] = 100
print(arr)


[[  0 100   2]
 [  3   4   5]]

In [22]:
l_2d = [[0, 1, 2], [3, 4, 5]]
print(l_2d)


[[0, 1, 2], [3, 4, 5]]

In [23]:
print([list(x) for x in list(zip(*l_2d))])


[[0, 3], [1, 4], [2, 5]]

In [24]:
arr = np.arange(6).reshape((2, 3))
print(arr)


[[0 1 2]
 [3 4 5]]

In [25]:
print(arr.T)


[[0 3]
 [1 4]
 [2 5]]

In [26]:
l_2d_1 = [[0, 1, 2], [3, 4, 5]]
l_2d_2 = [[0, 2, 4], [6, 8, 10]]

In [27]:
print(l_2d_1 + l_2d_2)


[[0, 1, 2], [3, 4, 5], [0, 2, 4], [6, 8, 10]]

In [28]:
# print(l_2d_1 - l_2d_2)
# TypeError: unsupported operand type(s) for -: 'list' and 'list'

In [29]:
arr1 = np.arange(6).reshape((2, 3))
print(arr1)


[[0 1 2]
 [3 4 5]]

In [30]:
arr2 = np.arange(0, 12, 2).reshape((2, 3))
print(arr2)


[[ 0  2  4]
 [ 6  8 10]]

In [31]:
print(arr1 + arr2)


[[ 0  3  6]
 [ 9 12 15]]

In [32]:
print(arr1 - arr2)


[[ 0 -1 -2]
 [-3 -4 -5]]

In [33]:
mat1 = np.matrix(arr1)
mat2 = np.matrix(arr2)

In [34]:
print(mat1 + mat2)


[[ 0  3  6]
 [ 9 12 15]]

In [35]:
print(mat1 - mat2)


[[ 0 -1 -2]
 [-3 -4 -5]]

In [36]:
print(l_2d_1 * 2)


[[0, 1, 2], [3, 4, 5], [0, 1, 2], [3, 4, 5]]

In [37]:
# print(l_2d_1 * l_2d_2)
# TypeError: can't multiply sequence by non-int of type 'list'

In [38]:
print(arr1 * 2)


[[ 0  2  4]
 [ 6  8 10]]

In [39]:
print(mat1 * 2)


[[ 0  2  4]
 [ 6  8 10]]

In [40]:
print(np.multiply(arr1, arr2))


[[ 0  2  8]
 [18 32 50]]

In [41]:
print(np.multiply(mat1, mat2))


[[ 0  2  8]
 [18 32 50]]

In [42]:
print(arr1 * arr2)


[[ 0  2  8]
 [18 32 50]]

In [43]:
arr1 = np.arange(4).reshape((2, 2))
print(arr1)


[[0 1]
 [2 3]]

In [44]:
arr2 = np.arange(6).reshape((2, 3))
print(arr2)


[[0 1 2]
 [3 4 5]]

In [45]:
print(np.dot(arr1, arr2))


[[ 3  4  5]
 [ 9 14 19]]

In [46]:
print(arr1.dot(arr2))


[[ 3  4  5]
 [ 9 14 19]]

In [47]:
print(np.matmul(arr1, arr2))


[[ 3  4  5]
 [ 9 14 19]]

In [48]:
print(arr1 @ arr2)


[[ 3  4  5]
 [ 9 14 19]]

In [49]:
mat1 = np.matrix(arr1)
mat2 = np.matrix(arr2)

In [50]:
print(np.dot(mat1, mat2))


[[ 3  4  5]
 [ 9 14 19]]

In [51]:
print(mat1.dot(mat2))


[[ 3  4  5]
 [ 9 14 19]]

In [52]:
print(np.matmul(mat1, mat2))


[[ 3  4  5]
 [ 9 14 19]]

In [53]:
print(mat1 @ mat2)


[[ 3  4  5]
 [ 9 14 19]]

In [54]:
print(mat1 * mat2)


[[ 3  4  5]
 [ 9 14 19]]

In [55]:
arr = np.arange(1, 5).reshape(2, 2)
print(arr)


[[1 2]
 [3 4]]

In [56]:
print(arr**2)


[[ 1  4]
 [ 9 16]]

In [57]:
mat = np.matrix(arr)
print(mat)


[[1 2]
 [3 4]]

In [58]:
print(mat**2)


[[ 7 10]
 [15 22]]

In [59]:
print(mat**2 == mat * mat)


[[ True  True]
 [ True  True]]

In [60]:
print(mat**3 == mat * mat * mat)


[[ True  True]
 [ True  True]]

In [61]:
# print(arr**-1)
# ValueError: Integers to negative integer powers are not allowed.

In [62]:
arr_f = np.array(arr, dtype=float)
print(arr_f**-1)


[[1.         0.5       ]
 [0.33333333 0.25      ]]

In [63]:
print(mat**-1)


[[-2.   1. ]
 [ 1.5 -0.5]]

In [64]:
print(mat**-2)


[[ 5.5  -2.5 ]
 [-3.75  1.75]]

In [65]:
print(mat**-2 == mat**-1 * mat**-1)


[[ True  True]
 [ True  True]]

In [66]:
print(mat**-3 == mat**-1 * mat**-1 * mat**-1)


[[ True  True]
 [ True  True]]