In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from pandas import DataFrame, Series
In [2]:
arr = np.arange(3)
arr.repeat(3)
Out[2]:
In [3]:
arr.repeat([2, 3, 4])
Out[3]:
In [4]:
from numpy.random import randn
In [5]:
arr = randn(2, 2)
arr
Out[5]:
In [6]:
arr.repeat(2, axis=0)
Out[6]:
In [7]:
arr.repeat([2, 3], axis=0)
Out[7]:
In [8]:
arr.repeat([2, 3], axis=1)
Out[8]:
In [9]:
arr
Out[9]:
In [10]:
np.tile(arr, 2)
Out[10]:
In [11]:
np.tile(arr, (2, 1))
Out[11]:
In [12]:
np.tile(arr, (3, 2))
Out[12]:
In [13]:
## 花式索引的等价函数
In [14]:
arr = np.arange(10) * 100
inds = [7, 1, 2, 6]
arr[inds]
Out[14]:
In [15]:
arr.take(inds)
Out[15]:
In [17]:
arr.put(inds, 42)
arr
Out[17]:
In [18]:
arr.put(inds, [40, 41, 42, 43])
arr
Out[18]:
In [19]:
inds = [2, 0, 2, 1]
arr = randn(2, 4)
arr
Out[19]:
In [20]:
arr.take(inds, axis=1)
Out[20]:
In [21]:
arr = randn(1000, 50)
# 500行随机样本
inds = np.random.permutation(1000)[:500]
%timeit arr[inds]
In [22]:
%timeit arr.take(inds, axis=0)
In [23]:
arr = np.arange(5)
arr
Out[23]:
In [24]:
arr * 4
Out[24]:
In [30]:
arr = randn(4, 3)
arr.mean(0)
Out[30]:
In [31]:
demeaned = arr - arr.mean(0)
demeaned
Out[31]:
In [32]:
demeaned.mean(0)
Out[32]:
In [35]:
row_means = arr.mean(1)
row_means.reshape((4, 1))
Out[35]:
In [36]:
demeaned = arr - row_means.reshape((4, 1))
demeaned.mean(1)
Out[36]:
In [37]:
arr - arr.mean(1)
In [38]:
arr - arr.mean(1).reshape((4, 1))
Out[38]:
In [40]:
arr = np.zeros((4, 4))
arr_3d = arr[:, np.newaxis, :]
arr_3d.shape
Out[40]:
In [41]:
arr_1d = np.random.normal(size=3)
arr_1d[:, np.newaxis]
Out[41]:
In [42]:
arr_1d[np.newaxis, :]
Out[42]:
In [43]:
arr = randn(3, 4, 5)
depth_means = arr.mean(2)
depth_means
Out[43]:
In [44]:
demeaned = arr - depth_means[:, :, np.newaxis]
demeaned.mean(2)
Out[44]:
In [ ]:
def demean_axis(arr, axis=0):
means = arr.mean(axis)
# 下面这些一般化的东西类似于N维的[:, :, np.newaxis]
indexer = [slice(None)] * arr.ndim
indexer[axis] = np.newaxis
return arr - means[indexer]
In [45]:
arr = np.zeros((4, 3))
arr[:] = 5
arr
Out[45]:
In [46]:
col = np.array([1.28, -0.42, 0.44, 1.6])
arr[:] = col[:, np.newaxis]
arr
Out[46]:
In [47]:
arr[:2] = [[-1.37], [0.509]]
arr
Out[47]:
In [ ]: