numpy笔记(vstack,random.permutation,empty_like,empty,diff,random.choice,random.randint,isin)

用来记录学习过程中遇到的numpy库各种模块,类,函数的用法

(1)np.vstack

numpy.vstack(tup)

垂直按顺序堆叠数组(按行),等效于形状为(N,1)的一维数组被重塑为(1,N)后沿第一轴的串联。
该函数在超过3维的数组中作用比较大,例如像素数据包括高度(第一轴),宽度(第二轴),rgb channel(第三轴)。函数 concatenatestackblock提供更常规的堆叠和串联操作

  • 参数:tup(数组序列)
    除第一个轴外,数组必须具有相同的形状。一维数组必须具有相同的长度。
  • 返回:stacked(多维数组)
    基于给定数组形成堆栈,至少是二维

vstack功能类似的操作:concatenate,stack,block,hstack,dstack,column_stack,vsplit

>>> a=np.array([1,2,3])
>>> b=np.array([4,5,6])
>>> np.vstack((a,b))
array([[1, 2, 3],
       [4, 5, 6]])
>>> a=np.array([[1],[2],[3]])
>>> b=np.array([[4], [5], [6]])
>>> np.vstack((a,b))
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

(2)np.random.permutation

random.permutation(x)

随机排列序列,或返回排列范围。如果 x 是多维数组,则仅沿其第一个索引进行随机排列。

  • 参数:x(整数或者数组)
    如果x是一个整数,随机排列np.arange(x),如果x是一个数组,创建副本,然后随机洗牌元素。
  • 返回:out(多维数组)
    重排列的序列或者数组范围
>>> np.random.permutation(10)
array([0, 7, 8, 4, 2, 6, 3, 5, 9, 1])
>>> np.random.permutation([1,4,7,8,3])
array([4, 8, 1, 7, 3])
>>> arr=np.arange(9).reshape(3,3)
>>> arr
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.random.permutation(arr)
array([[6, 7, 8],
       [3, 4, 5],
       [0, 1, 2]])

numpy库中已经对此方法进行更新,新方法使用见

Generator.permutation

(3)np.empty_like

numpy.empty_like(prototype, dtype=None, order='K', subok=True, shape=None)

返回与给定数组具有相同形状和类型的新数组。
类似用法:ones_like,zeros_like,full_like,empty

>>> a = ([1,2,3], [4,5,6])
>>> np.empty_like(a)
array([[              0,              10,               1],
       [105553155014656,     55834574861,               0]])
>>> a = np.array([[1., 2., 3.],[4.,5.,6.]])
>>> np.empty_like(a)
array([[4.9e-324, 9.9e-324, 1.5e-323],
       [2.0e-323, 2.5e-323, 3.0e-323]])

(4)np.empty

numpy.empty(shape, dtype=float, order='C', *, like=None)

返回给定形状和类型的新数组,不初始化初始化条目,和np.empty_like区别在于:np.empty输入shape即数组的形状,np.empty_like输入prototype数组

>>> np.empty([2,2])
array([[0.0000e+000, 1.0094e-320],
       [7.9051e-323, 7.9051e-323]])
>>> np.empty([2,2],dtype=int)
array([[   0, 2043],
       [  16,   16]])

(5)np.diff

numpy.diff(a, n=1, axis=-1, prepend=<no value>, append=<no value>)

沿给定轴计算第n个离散差值。第一个差值由out[i]=a[i+1]-a[i]沿给定轴给出,更大的差值通过使用diff递归计算。

a:array_like 输入数组
n:int, optional 差分次数。如果为零,则按原样返回输入
axis:int, optional 取差值的轴,默认为最后一个轴
diff:ndarray 输出差值计算后的数组,大小由a和n决定
>>> x=np.array([1,2,4,7,0])
>>> np.diff(x)
array([ 1,  2,  3, -7])
>>> np.diff(x,n=2)
array([  1,   1, -10])
>>> x=np.array([[1,3,6,10],[0,5,6,8]])
>>> np.diff(x)
array([[2, 3, 4],
       [5, 1, 2]])
>>> np.diff(x,axis=0)
array([[-1,  2,  0, -2]])

一个值得注意的例外是datetime64,它会生成timedelta64的输出数组。

>>> x = np.arange('1066-10-13', '1066-10-16', dtype=np.datetime64)
>>> np.diff(x)
array([1, 1], dtype='timedelta64[D]')

(6)np.random.choice

random.choice(a, size=None, replace=True, p=None)

从给定的一维数组生成随机样本

a:1-D array-like or int 如果是一维数组,随机样本从元素中产生,如果是整数,随机样本从np.arange(a)中产生
size:int or tuple of ints, optional 输出形状,如果给定形状为(m, n, k),那么抽取m * n * k 个样本,默认为None,返回一个单一值
replace:boolean, optional 是否能重复选择
p:1-D array-like, optional 与a中的每个条目相关的概率。如果不给出,则样本假设a中所有条目的概率分布均匀。
samples:single item or ndarray 产生的随机样本

与其类似的函数:randint, shuffle, permutation, Generator.choice

>>> np.random.choice(5,3,replace=False)
array([0, 3, 4])
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
>>> np.random.choice(5,3,replace=False,p=[0.1, 0, 0.3, 0.6, 0])
array([3, 0, 2])

任何数组形状都能使用,不仅仅是整数

>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'Christopher', 'pooh', 'Christopher'], dtype='<U11')

(7)np.random.randint

random.randint(low, high=None, size=None, dtype=int)

返回从low(包含)到high(不包含)的随机整数

与其类似的用法:random_integers,Generator.integers

>>> np.random.randint(2,size=10)
array([0, 0, 1, 1, 0, 1, 0, 1, 1, 1])
>>> np.random.randint(1,size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

生成一个值在0-4的2*4数组

>>> np.random.randint(5,size=(2,4))
array([[0, 0, 0, 3],
       [1, 2, 1, 2]])

生成1*3数组有三个不同的上届

>>> np.random.randint(1,[3,5,10])
array([1, 4, 6])

使用数据类型为uint8的广播生成2×4阵列

>>> np.random.randint([1,3,5,7],[[10],[20]],dtype=np.uint8)
array([[ 2,  7,  8,  9],
       [10, 10, 16, 11]], dtype=uint8)

(8)np.isin

numpy.isin(element, test_elements, assume_unique=False, invert=False)

返回一个与element形状相同的,如果element中的元素在test_elements,则返回True

element:array_like
test_elements:array_like
assume_unique:bool, optional
invert:bool, optional 
如果为True,则返回数组中的值将被反转即计算不在test_elements中的元素
>>> element = 2*np.arange(4).reshape((2,2))
>>> element
array([[0, 2],
       [4, 6]])
>>> test_elements = [1,2,4,8]
>>> mask = np.isin(element,test_elements)
>>> mask
array([[False,  True],
       [ True, False]])
>>> element[mask]
array([2, 4])

匹配布尔值可以通过nonzero获得数值

>>> np.nonzero(mask)
(array([0, 1]), array([1, 0]))

invert=True则不在的返回True

>>> mask=np.isin(element,test_elements,invert=True)
>>> mask
array([[ True, False],
       [False,  True]])
>>> element[mask]
array([0, 6])

因为数组处理集合方式导致以下方式不可行

>>> test_set={
    
    1,2,4,8}
>>> np.isin(element,test_set)
array([[False, False],
       [False, False]])

需要先将集合变成列表

>>> np.isin(element, list(test_set))
array([[False,  True],
       [ True, False]])

猜你喜欢

转载自blog.csdn.net/weixin_45526117/article/details/124260127