import numpy as np
属性
ndim
shape
size
创建array——numpy.ndarray
函数 | 含义 |
---|---|
np.array() | 创建一个numpy.ndarray类型的数组 |
np.zeros(shape) | 返回一个指定shape的,元素全为0的numpy.ndarray类型的数组 |
np.arange(start, stop, step) | 返回一个 以step为步长,从start开始,到end前结束 (左闭右开)的numpy.ndarray类型的数组 |
np.ones(shape) | 返回一个指定shape的,元素全为1的numpy.ndarray类型的数组 |
np.empty(shape) | 返回一个指定shape的numpy.ndarray类型的数组,其中的元素未初始化 |
np.linspace(start, stop, num, endpoint, retstep) | 返回一个长度为num的数组,数组以start开始,可能以stop结束,其中的元素均匀分布 |
np.array()
import numpy as np
a = np.array([1, 2, 3])
print(type(a)) # <class 'numpy.ndarray'>
print(a) # [1 2 3]
np.zeros(shape)
shape : int or tuple of ints
import numpy as np
a = np.zeros((3,4))
print(type(a))
print(a)
np.ones(shape)
np.arange(start, stop, step, dtype)
- Return evenly spaced values within a given interval.
- dtype is the type of the output array.可以被指定
import numpy as np
a = np.arange(0, 24, 2).reshape((3, 4))
print(type(a))
print(a)
np.empty(shape)
Return a new array of given shape and type, without initializing entries.
import numpy as np
a = np.empty((2,3))
print(type(a))
print(a)
np.linspace(start, stop, num=50, endpoint=True, retstep=False)
start:
- 以start开始
num:
- 表示本数组有多少数,默认是50
endpoint:
- True(默认):表示以stop结束
- False:表示以 [(stop - start)/num]*(num - 1) 结束
retstep:
- False(默认):表示np.linspace()返回的结果是个array
- True:表示np.linspace()的返回结果是个tuple,包含(array, step)
import numpy as np
a = np.linspace(0, 20, 20, retstep= True)
print(type(a))
print(a)
numpy的其他函数
函数 | 含义 |
---|---|
np.sin(arry)、cos(arry)、tan(arry) | 求 arry 中每个元素的三角函数,其中元素的数值为弧长值 |
np.dot(a, b) | 得到数组(又称向量)的内积,结果是一个数 |
np.sum(a, axis) | 求和,axis表示从哪个方向求 |
np.min()、np.max()、np.mean()、np.average() | 参照np.sum(a, axis),其中mean、average结果差不多 |
np.median(a, axis) | 求中位数 |
np.cumsum(a, axis) | 挨个加,并得到结果,详见例子 |
np.nonzero(a) | 返回非0的下标 |
np.sort() | |
np.clip(a, a_min, a_max) | 相当于一个过滤+修改器,将不在(a_min, a_max)的改成a_min,或 a_max |
np.transpose(a)或 a.T | 转置 |
np.sin()、cos()、tan()
sin(1)得到的是弧长为1 的sin值
import numpy as np
a = np.linspace(1, 10, num= 10)
b = np.sin(a)
print(type(b))
print(b)
np.dot(a, b)
得到内积,是一个数字
import numpy as np
a = np.linspace(1, 10, num= 10)
b = np.arange(4, 14)
c = np.dot(a, b)
print(type(c))
print(c)
np.sum(a, axis)
import numpy as np
a = np.linspace(1, 12, num=12).reshape((3, 4))
print(a)
print(np.sum(a))
print(np.sum(a, axis=0)) # 求垂直方向的和
print(np.sum(a, axis=1)) # 求水平方向的和
np.min()、np.max()、np.mean()、np.average()
np.mean():
Compute the arithmetic mean along the specified axis.
np.average():
Compute the weighted average along the specified axis.
并且这两个不在同一个模块中
np.median(a, axis)
这个函数会先排序,然后再找中位数
中位数是:
- 总长为奇时:中间的数
- 总长为偶时:中间两个数的均值
import numpy as np
a = np.linspace(1, 12, num=12)
print(np.median(a))
b = np.linspace(1, 11, num=11)
print(np.median(b))
np.cumsum(a, axis)
Return the cumulative sum of the elements along a given axis.
返回沿给定轴的元素的累积和。
import numpy as np
a = np.arange(2,11).reshape(3,3)
print(a)
print(np.cumsum(a)) # [ 2 5 9 14 20 27 35 44 54]
np.nonzero(a)
Return the indices of the elements that are non-zero.
Returns a tuple of arrays, one for each dimension ofa
,containing the indices of the non-zero elements in that dimension.
import numpy as np
a = np.arange(2,11).reshape(3,3)
print(a)
print(np.nonzero(a)) # (array([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
np.sort()
np.clip(a, a_min, a_max)
import numpy as np
a = np.arange(2, 11).reshape(3, 3)
print(np.clip(a, 5, 9)) # <5的数全改成5,>9的数全改成9,5<x<9的数不变
np.transpose(a),与a.T一样
import numpy as np
a = np.arange(2,11).reshape(3,3)
print(a)
print(np.transpose(a)) # 转置
print(a.T) # 转置
数组拼接
函数 | 含义 |
---|---|
np.vstack(tup)、np.hstack(tup) | 将tuple内的所有数组按照vertical、horizontal 方向拼接 |
np.concatenate(a_tuple, axis=0) | 将a_tuple内的数组按照某个方向拼接 |
np.split(ary,indices_or_sections,axis) | 对数组按照某方向均匀分割成indices_or_sections段 |
np.array_split(ary, indices_or_sections, axis) | 实现不均匀分割 |
np.vstack(tup)、np.hstack(tup)
np.vstack((a, b)):
Stack arrays in sequence vertically
np.hstack((a, b)):
Stack arrays in sequence horizontally
import numpy as np
a = np.array([1, 2, 3])
b = np.array([7, 8, 9])
c = np.vstack((a, b)) # 在垂直方向上拼接
print(c)
print(np.hstack((a, b))) # 在水平方向上拼接
np.concatenate(a_tuple, axis=0)
import numpy as np
a = np.array([1, 2, 3])[np.newaxis,:]
b = np.array([7, 8, 9])[np.newaxis,:]
c = np.concatenate((a, b), axis = 0)
print(c)
np.split(ary,indices_or_sections,axis=0),对数组的均匀分割
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.split(a, 3, axis= 0))
indices_or_sections:是要把ary均匀的切割成多少段,不能均匀切割的话会报错
例如报错:三行无法均匀分割成两行
import numpy as np
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.split(a, 2, axis= 0)) # ValueError: array split does not result in an equal division 三行无法均匀分割成两行
np.array_split(ary, indices_or_sections, axis=0),实现不均匀分割
import numpy as np
a = np.arange(2, 14).reshape(3, 7)
print(a)
print(np.array_split(a, 3, axis=1))
print(np.array_split(a, 2, axis=0))
可以看出不均匀分割的原则:
- 最长的几个是(7\3+1)
- 剩下几个是是 (7\3)
numpy的一些属性
属性 | 含义 |
---|---|
np.random | |
np.newaxis |
np.random
a = np.random.random((3,4))
print(a)
np.newaxis
不大懂,知道有这么回事就行
import numpy as np
a = np.array([1, 2, 3])
print(a)
b = a[:, np.newaxis]
print(b)
c = a[np.newaxis, :]
copy,深浅克隆(这个方法与builtins.py里的copy方法不一样)
import numpy as np
a = np.arange(2, 23).reshape(3, 7)
b = a.copy() # 深拷贝
c = a[...] # 不知道
d = a # 内存地址一样
a[0][0] = 11
print(b) # 不会改变
print(c) # 会改变
print(c is a) # False
print(d) # 会改变
print(d is a) # True
print(id(d) == id(a)) # True