Numpy

(unfinished) Numpy的ndarray、数学公式和矩阵使用、数据切片

NDarray and Matrix

lst = [[1,2,3],[4,5,6]] #2*3 array
a = np.array(lst) #create array from list


print(a.shape)
#(2,3) 因为这是一个2*3的矩阵

print(a.ndim)
#2 2 dimensions

print(a.dtype)
# numpy里的data type得是同一种类型,才能保证快速计算

print(a.size)
#6 总共有6个元素 

arange()和linspace()都可以生成一串数,不过linspace生成的是指定gap的数目,可以是float。

b = np.arange(0, 10, 2, dtype='float') # create 1d array, [start, stop)
print(type(b)) # class 'numpy.ndarray'
print(b) #[0. 2. 4. 6. 8.]
print(b.shape) #(5,)

c = np.linspace(1.5, 2.5, 9) # create 1d array with float, [start, stop]
print(type(c)) # class 'numpy.ndarray'
print(c) #[1.5   1.625 1.75  1.875 2.    2.125 2.25  2.375 2.5  ]
print(c.shape) #(9,)

reshape() - 改变数组的形状。通过reshape生成的新数组和原始数组共用一个内存,也就是说,若更改其中数组的元素,另一个数组也将发生改变。使用时可以用np.reshape(data, (2,4))或者data.reshape(2,4)

arange() - 创建一个一维的等差数列数组,与Python中的range()函数类似。区别在于,np.arange()返回的是一个numpy数组,而Python中的range()函数返回的是一个列表。arange允许步长为小数,而range不允许。

如果混着用slicing和integer indexing来获取matrix中的某一列,那么integer indexing不会保留数据原始的rank,但是slicing可以,比如

当然也可以reindex一下 和之前一样,-1表示系统来根据element的个数指定行数。

Numpy自己的加减乘除是一一对应的运算,比如以下都是element-wise

如果想要做矩阵乘法,要用

沿着列或者行的加减法

轴(axis):每一个线性的数组称为是一个轴,也就是维度(dimensions)。比如,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组,所以一维数组就是ndarray中的轴,第一个轴(也就是第0轴)相当于是底层数组,第二个轴(也就是第1轴)是底层数组里的数组。

很多时候可以声明axis。axis=0 or 'index',表示沿着第0轴进行操作,即对每一进行操作, apply function to each column;axis=1 or 'columns',表示沿着第1轴进行操作,即对每一进行操作, apply function to each row。

秩(rank):维数,一维数组的秩为1,二维数组的秩为2,以此类推。即轴的个数。

用True/False可以很容易的为np array 做masking 比如

Broadcasting [详情看这个] 针对一行或一列做集体操作,比如给一行加一个数,给另一行加另一个数。

numpy里的random,可以用来有放回抽样、无放回抽样、按照一定概率抽样、生成两个数据点范围内的random number

也可以用np手动做train test split

np.set_printoptions(threshold = np.nan) 可以让numpy显示出来所有中间那些被隐藏掉的elements。

[其他的一些操作细节]

Last updated