京公网安备 11010802034615号
			经营许可证编号:京B2-20210330
		1. 引言
	最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的。目前为止,觉得就算法仿真研究而言,还是matlab用得特别舒服,可能是比较熟悉的缘故吧。matlab直接集成了很多算法工具箱,函数查询、调用、变量查询等非常方便,或许以后用久了python也会感觉很好用。与python相比,最喜欢的莫过于可以直接选中某段代码执行了,操作方便,python也可以实现,就是感觉不是很方便。
言归正传,做算法要用到很多的向量和矩阵运算操作,这些嘛在matlab里面已经很熟悉了,但用python的时候需要用一个查一个,挺烦的,所以在此稍作总结,后续使用过程中会根据使用体验更新。
python的矩阵运算主要依赖numpy包,scipy包以numpy为基础,大大扩展了后者的运算能力。
2. 创建一般的多维数组
import numpy as np
 
a = np.array([1,2,3], dtype=int) # 创建1*3维数组 array([1,2,3])
 
type(a) # numpy.ndarray类型
 
a.shape # 维数信息(3L,)
 
a.dtype.name # 'int32'
 
a.size # 元素个数:3
 
a.itemsize #每个元素所占用的字节数目:4
 
b=np.array([[1,2,3],[4,5,6]],dtype=int) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
 
b.shape # 维数信息(2L,3L)
 
b.size # 元素个数:6
 
b.itemsize # 每个元素所占用的字节数目:4
 
 
c=np.array([[1,2,3],[4,5,6]],dtype='int16') # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16)
 
c.shape # 维数信息(2L,3L)
 
c.size # 元素个数:6
 
c.itemsize # 每个元素所占用的字节数目:2
 
c.ndim # 维数
 
  
d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 复数二维数组
 
d.itemsize # 每个元素所占用的字节数目:16
 
d.dtype.name # 元素类型:'complex128'
3. 创建特殊类型的多维数组     
a1 = np.zeros((3,4)) # 创建3*4全零二维数组
 
输出:
 
array([[ 0., 0., 0., 0.],
 
  [ 0., 0., 0., 0.],
 
  [ 0., 0., 0., 0.]])
 
a1.dtype.name # 元素类型:'float64'
 
a1.size # 元素个数:12
 
a1.itemsize # 每个元素所占用的字节个数:8
 
  
 
  
 
a2 = np.ones((2,3,4), dtype=np.int16) # 创建2*3*4全1三维数组
 
a2 = np.ones((2,3,4), dtype='int16')  # 创建2*3*4全1三维数组
 
输出:
 
array([[[1, 1, 1, 1],
 
  [1, 1, 1, 1],
 
  [1, 1, 1, 1]],
 
  
 
  [[1, 1, 1, 1],
 
  [1, 1, 1, 1],
 
  [1, 1, 1, 1]]], dtype=int16)
 
  
 
  
 
a3 = np.empty((2,3)) # 创建2*3的未初始化二维数组
 
输出:(may vary)
 
array([[ 1., 2., 3.],
 
  [ 4., 5., 6.]])
 
 
 
a4 = np.arange(10,30,5) # 初始值10,结束值:30(不包含),步长:5
 
输出:array([10, 15, 20, 25])
 
a5 = np.arange(0,2,0.3) # 初始值0,结束值:2(不包含),步长:0.2
 
输出:array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
 
 
from numpy import pi
 
np.linspace(0, 2, 9) # 初始值0,结束值:2(包含),元素个数:9
 
输出:
 
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
 
x = np.linspace(0, 2*pi, 9)
 
输出:
 
array([ 0.  , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
 
  3.92699082, 4.71238898, 5.49778714, 6.28318531])
 
a = np.arange(6)
 
输出:
 
array([0, 1, 2, 3, 4, 5])
 
b = np.arange(12).reshape(4,3)
 
输出:
 
array([[ 0, 1, 2],
 
  [ 3, 4, 5],
 
  [ 6, 7, 8],
 
  [ 9, 10, 11]])
 
c = np.arange(24).reshape(2,3,4)
 
输出:
 
array([[[ 0, 1, 2, 3],
 
  [ 4, 5, 6, 7],
 
  [ 8, 9, 10, 11]],
 
  [[12, 13, 14, 15],
 
  [16, 17, 18, 19],
 
  [20, 21, 22, 23]]]) 
使用numpy.set_printoptions可以设置numpy变量的打印格式
在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例
4. 多维数组的基本操作
加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作。    
a = np.arange(4)
 
输出:
 
array([0, 1, 2, 3])
 
b = a**2
 
输出:
 
array([0, 1, 4, 9])
 
c = 10*np.sin(a)
 
输出:
 
 array([ 0.  , 8.41470985, 9.09297427, 1.41120008])
 
  
 
  
 
n < 35
 
输出:
 
array([ True, True, True, True], dtype=bool)
 
  
 
A = np.array([[1,1],[0,1]])
 
B = np.array([[2,0],[3,4]])
 
C = A * B # 元素点乘
 
输出:
 
array([[2, 0],
 
  [0, 4]])
 
D = A.dot(B) # 矩阵乘法
 
输出:
 
array([[5, 4],
 
  [3, 4]])
 
E = np.dot(A,B) # 矩阵乘法
 
输出:
 
array([[5, 4],
 
  [3, 4]])
多维数组操作过程中的类型转换
When operating with arrays of different types, the type of the resulting array corresponds to the more general or precise one (a behavior known as upcasting)
即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting    
a = np.ones((2,3),dtype=int)  # int32
 
b = np.random.random((2,3))  # float64
 
b += a # 正确 
 
a += b # 错误     
a = np.ones(3,dtype=np.int32)
 
b = np.linspace(0,pi,3)
 
c = a + b
 
d = np.exp(c*1j)
 
输出:
 
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
 
  -0.54030231-0.84147098j])
 
d.dtype.name
 
输出:
 
 'complex128'
多维数组的一元操作,如求和、求最小值、最大值等    
a = np.random.random((2,3))
 
a.sum()
 
a.min()
 
a.max()
 
  
 
  
 
b = np.arange(12).reshape(3,4)
 
输出:
 
array([[ 0, 1, 2, 3],
 
  [ 4, 5, 6, 7],
 
  [ 8, 9, 10, 11]])
 
b.sum(axis=0) # 按列求和
 
输出:
 
array([12, 15, 18, 21])
 
b.sum(axis=1) # 按行求和
 
输出:
 
array([ 6, 22, 38])
 
b.cumsum(axis=0) # 按列进行元素累加
 
输出:
 
array([[ 0, 1, 2, 3],
 
  [ 4, 6, 8, 10],
 
  [12, 15, 18, 21]])
 
b.cumsum(axis=1) # 按行进行元素累加
 
输出:
 
array([[ 0, 1, 3, 6],
 
  [ 4, 9, 15, 22],
 
  [ 8, 17, 27, 38]]) 
 
 
universal functions
 
 
B = np.arange(3)
 
np.exp(B)
 
np.sqrt(B)
 
C = np.array([2.,-1.,4.])
 
np.add(B,C) 
其他的ufunc函数包括:
all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor,inner, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var,vdot, vectorize, where
5. 数组索引、切片和迭代    
a = np.arange(10)**3
 
a[2]
 
a[2:5]
 
a[::-1] # 逆序输出
 
for i in a:
 
 print (i**(1/3.))     
def f(x,y):
 
 return 10*x+y
 
b = np.fromfunction(f,(5,4),dtype=int)
 
b[2,3]
 
b[0:5,1]
 
b[:,1]
 
b[1:3,:]
 
b[-1]     
c = np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])
 
输出:
 
array([[[ 0, 1, 2],
 
  [ 10, 11, 12]],
 
  
 
  [[100, 101, 102],
 
  [110, 111, 112]]])
 
c.shape
 
输出:
 
(2L, 2L, 3L)
 
c[0,...]
 
c[0,:,:]
 
输出:
 
array([[ 0, 1, 2],
 
  [10, 11, 12]])
 
c[:,:,2]
 
c[...,2]
 
输出:
 
array([[ 2, 12],
 
  [102, 112]])
 
  
 
for row in c:
 
 print(row)
 
  
 
for element in c.flat:
 
 print(element)     
a = np.floor(10*np.random.random((3,4)))
 
输出:
 
array([[ 3., 9., 8., 4.],
 
  [ 2., 1., 4., 6.],
 
  [ 0., 6., 0., 2.]])
 
a.ravel()
 
输出:
 
array([ 3., 9., 8., ..., 6., 0., 2.])
 
a.reshape(6,2)
 
输出:
 
array([[ 3., 9.],
 
  [ 8., 4.],
 
  [ 2., 1.],
 
  [ 4., 6.],
 
  [ 0., 6.],
 
  [ 0., 2.]])
 
a.T
 
输出:
 
array([[ 3., 2., 0.],
 
  [ 9., 1., 6.],
 
  [ 8., 4., 0.],
 
  [ 4., 6., 2.]])
 
a.T.shape
 
输出:
 
(4L, 3L)
 
a.resize((2,6))
 
输出:
 
array([[ 3., 9., 8., 4., 2., 1.],
 
  [ 4., 6., 0., 6., 0., 2.]])
 
a.shape
 
输出:
 
(2L, 6L)
 
a.reshape(3,-1)
 
输出:
 
array([[ 3., 9., 8., 4.],
 
  [ 2., 1., 4., 6.],
 
  [ 0., 6., 0., 2.]]) 
详查以下函数:
ndarray.shape, reshape, resize, ravel
6. 组合不同的多维数组    
a = np.floor(10*np.random.random((2,2)))
 
输出:
 
array([[ 5., 2.],
 
  [ 6., 2.]])
 
b = np.floor(10*np.random.random((2,2)))
 
输出:
 
array([[ 0., 2.],
 
  [ 4., 1.]])
 
np.vstack((a,b))
 
输出:
 
array([[ 5., 2.],
 
  [ 6., 2.],
 
  [ 0., 2.],
 
  [ 4., 1.]])
 
np.hstack((a,b))
 
输出:
 
array([[ 5., 2., 0., 2.],
 
  [ 6., 2., 4., 1.]])
 
  
 
  
 
from numpy import newaxis
 
np.column_stack((a,b))
 
输出:
 
array([[ 5., 2., 0., 2.],
 
  [ 6., 2., 4., 1.]])
 
  
 
  
 
a = np.array([4.,2.])
 
b = np.array([2.,8.])
 
a[:,newaxis]
 
输出:
 
array([[ 4.],
 
  [ 2.]])
 
b[:,newaxis]
 
输出:
 
array([[ 2.],
 
  [ 8.]])
 
np.column_stack((a[:,newaxis],b[:,newaxis]))
 
输出:
 
array([[ 4., 2.],
 
  [ 2., 8.]])
 
np.vstack((a[:,newaxis],b[:,newaxis]))
 
输出:
 
array([[ 4.],
 
  [ 2.],
 
  [ 2.],
 
  [ 8.]])
 
np.r_[1:4,0,4]
 
输出:
 
array([1, 2, 3, 0, 4])
 
np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]
 
输出:
 
array([[1, 2, 3, 0, 0, 0, 4, 5, 6]]) 
详细使用请查询以下函数:
hstack, vstack, column_stack, concatenate, c_, r_
7. 将较大的多维数组分割成较小的多维数组    
a = np.floor(10*np.random.random((2,12)))
 
输出:
 
array([[ 9., 7., 9., ..., 3., 2., 4.],
 
  [ 5., 3., 3., ..., 9., 7., 7.]])
 
np.hsplit(a,3)
 
输出:
 
[array([[ 9., 7., 9., 6.],
 
  [ 5., 3., 3., 1.]]), array([[ 7., 2., 1., 6.],
 
  [ 7., 5., 0., 2.]]), array([[ 9., 3., 2., 4.],
 
  [ 3., 9., 7., 7.]])]
 
np.hsplit(a,(3,4))
 
输出:
 
[array([[ 9., 7., 9.],
 
  [ 5., 3., 3.]]), array([[ 6.],
 
  [ 1.]]), array([[ 7., 2., 1., ..., 3., 2., 4.],
 
  [ 7., 5., 0., ..., 9., 7., 7.]])] 
实现类似功能的函数包括:
hsplit,vsplit,array_split
8.  多维数组的复制操作    
a = np.arange(12)
 
输出:
 
array([ 0, 1, 2, ..., 9, 10, 11])
 
  
 
not copy at all
 
  
 
b = a
 
b is a # True
 
b.shape = 3,4
 
a.shape # (3L,4L)
 
  
 
def f(x) # Python passes mutable objects as references, so function calls make no copy.
 
 print(id(x)) # id是python对象的唯一标识符
 
  
 
id(a) # 111833936L
 
id(b) # 111833936L
 
f(a)  # 111833936L
 
  
 
  
 
浅复制
c = a.view()
 
c is a # False
 
c.base is a # True
 
c.flags.owndata # False
 
c.shape = 2,6
 
a.shape # (3L,4L)
 
c[0,4] = 1234
 
print(a)
 
输出:
 
array([[ 0, 1, 2, 3],
 
  [1234, 5, 6, 7],
 
  [ 8, 9, 10, 11]])
 
s = a[:,1:3]
 
s[:] = 10
 
print(a)
 
输出:
 
array([[ 0, 10, 10, 3],
 
  [1234, 10, 10, 7],
 
  [ 8, 10, 10, 11]])
 
  
 
  
 
深复制
d = a.copy()
 
d is a # False
 
d.base is a # False
 
d[0,0] = 9999
 
print(a)
 
输出:
 
array([[ 0, 10, 10, 3],
 
  [1234, 10, 10, 7],
 
  [ 8, 10, 10, 11]])
numpy基本函数和方法一览
arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros,zeros_like
Conversions
ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
Manipulations
array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize,squeeze, swapaxes, take, transpose, vsplit, vstack
Questionsall, any, nonzero, where
Ordering
argmax, argmin, argsort, max, min, ptp, searchsorted, sort
Operations
choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum
Basic Statistics
cov, mean, std, var
Basic Linear Algebra
cross, dot, outer, linalg.svd, vdot
完整的函数和方法一览表链接:
9. 特殊的索引技巧
    
a = np.arange(12)**2
输出:
array([ 0, 1, 4, ..., 81, 100, 121])
i = np.array([1,1,3,8,5])
a[i]
输出:
array([ 1, 1, 9, 64, 25])
 
j = np.array([[3,4],[9,7]])
a[j]
输出:
array([[ 9, 16],
  [81, 49]])
 
 
palette = np.array([[0,0,0],[255,0,0],[0,255,0],[0,0,255],[255,255,255]])
image = np.array([[0,1,2,0],[0,3,4,0]])
palette[image]
输出:
array([[[ 0, 0, 0],
  [255, 0, 0],
  [ 0, 255, 0],
  [ 0, 0, 0]],
 
  [[ 0, 0, 0],
  [ 0, 0, 255],
  [255, 255, 255],
  [ 0, 0, 0]]])
 
 
i = np.array([[0,1],[1,2]])
j = np.array([[2,1],[3,3]])
a[i,j]
输出:
array([[ 2, 5],
  [ 7, 11]])
l = [i,j]
a[l]
输出:
array([[ 2, 5],
  [ 7, 11]])
 
 
a[i,2]
输出:
array([[ 2, 6],
  [ 6, 10]])
 
a[:,j]
输出:
array([[[ 2, 1],
  [ 3, 3]],
 
  [[ 6, 5],
  [ 7, 7]],
 
  [[10, 9],
  [11, 11]]])    
s = np.array([i,j])
print(s)
array([[[0, 1],
  [1, 2]],
 
  [[2, 1],
  [3, 3]]])
 
a[tuple(s)]
输出:
array([[ 2, 5],
  [ 7, 11]])
print(tupe(s))
输出:
(array([[0, 1],
  [1, 2]]), array([[2, 1],
  [3, 3]]))
10. 寻找最大值/最小值及其对应索引值    
time = np.linspace(20, 145, 5)
输出:
 array([ 20. , 51.25, 82.5 , 113.75, 145. ])
 
data = np.sin(np.arange(20)).reshape(5,4)
输出:
array([[ 0.  , 0.84147098, 0.90929743, 0.14112001],
  [-0.7568025 , -0.95892427, -0.2794155 , 0.6569866 ],
  [ 0.98935825, 0.41211849, -0.54402111, -0.99999021],
  [-0.53657292, 0.42016704, 0.99060736, 0.65028784],
  [-0.28790332, -0.96139749, -0.75098725, 0.14987721]])
 
ind = data.argmax(axis=0)
输出:
array([2, 0, 3, 1], dtype=int64)
 
time_max = time[ind]
输出:
array([ 82.5 , 20. , 113.75, 51.25])
 
data_max = data[ind, xrange(data.shape[1])]
输出:
array([ 0.98935825, 0.84147098, 0.99060736, 0.6569866 ])
 
np.all(data_max == data.max(axis=0))
输出:
True
 
  
 
a = np.arange(5)
a[[1,3,4]] = 0
print(a)
输出:
array([0, 0, 2, 0, 0])
a = np.arange(5)
a[[0,0,2]] = [1,2,3]
print(a)
输出:
array([2, 1, 3, 3, 4])
 
 
a = np.arange(5)
a[[0,0,2]] += 1
print(a)
输出:
array([1, 1, 3, 3, 4])    
a = np.arange(12).reshape(3,4)
 b = a > 4
输出:
array([[False, False, False, False],
  [False, True, True, True],
  [ True, True, True, True]], dtype=bool)
 
a[b]
输出:
array([ 5, 6, 7, 8, 9, 10, 11])
 
a[b] = 0
print(a)
输出:
array([[0, 1, 2, 3],
  [4, 0, 0, 0],
  [0, 0, 0, 0]])    
a = np.arange(12).reshape(3,4)
b1 = np.array([False,True,True])
b2 = n.array([True,False,True,False])
a[b1,:]
输出:
array([[ 4, 5, 6, 7],
  [ 8, 9, 10, 11]])
 
a[b1]
输出:
array([[ 4, 5, 6, 7],
  [ 8, 9, 10, 11]])
 
a[:,b2]
输出:
array([[ 0, 2],
  [ 4, 6],
  [ 8, 10]])
 
a[b1,b2]
输出:
array([ 4, 10])
11. ix_() function    
a = np.array([2,3,4,5])
b = np.array([8,5,4])
c = np.array([5,4,6,8,3])
ax,bx,cx = np.ix_(a,b,c)
print(ax) # (4L, 1L, 1L)
输出:
array([[[2]],
 
  [[3]],
 
  [[4]],
 
  [[5]]])
print(bx) # (1L, 3L, 1L)
输出:
array([[[8],
  [5],
  [4]]])
print(cx) # (1L, 1L, 5L)
输出:
array([[[5, 4, 6, 8, 3]]])
 
 
result = ax + bx*cx
输出:
array([[[42, 34, 50, 66, 26],
  [27, 22, 32, 42, 17],
  [22, 18, 26, 34, 14]],
 
  [[43, 35, 51, 67, 27],
  [28, 23, 33, 43, 18],
  [23, 19, 27, 35, 15]],
 
  [[44, 36, 52, 68, 28],
  [29, 24, 34, 44, 19],
  [24, 20, 28, 36, 16]],
 
  [[45, 37, 53, 69, 29],
  [30, 25, 35, 45, 20],
  [25, 21, 29, 37, 17]]])
 
result[3,2,4]
输出:17
12. 线性代数运算    
a = np.array([[1.,2.],[3.,4.]])
a.transpose() # 转置
np.linalg.inv(a) # 求逆
u = np.eye(2) # 产生单位矩阵
np.dot(a,a) # 矩阵乘积
np.trace(a) # 求矩阵的迹
y = np.array([5.],[7.]])
np.linalg.solve(a,y) # 求解线性方程组
np.linalg.eig(a) # 特征分解
“Automatic” Reshaping
    
a = np.arange(30)
a.shape = 2,-1,3
a.shape # (2L, 5L, 3L)
print(a)
array([[[ 0, 1, 2],
  [ 3, 4, 5],
  [ 6, 7, 8],
  [ 9, 10, 11],
  [12, 13, 14]],
 
  [[15, 16, 17],
  [18, 19, 20],
  [21, 22, 23],
  [24, 25, 26],
  [27, 28, 29]]])
    
x = np.arange(0,10,2)
y = np.arange(5)
m = np.vstack([x,y])
输出:
array([[0, 2, 4, 6, 8],
  [0, 1, 2, 3, 4]])
n = np.hstack([x,y])
输出:
array([0, 2, 4, 6, 8, 0, 1, 2, 3, 4])
13. 矩阵的创建    
a = np.array([1,2,3])
a1 = np.mat(a)
输出:
matrix([[1, 2, 3]])
type(a1)
输出:
numpy.matrixlib.defmatrix.matrix
a1.shape
输出:
(1L, 3L)
a.shape
输出:
(3L,)
 
b=np.matrix([1,2,3])
输出:
matrix([[1, 2, 3]])
 
from numpy import *
data1 = mat(zeros((3,3)))
data2 = mat(ones((2,4)))
data3 = mat(random.rand(2,2))
data4 = mat(random.randint(2,8,size=(2,5)))
data5 = mat(eye(2,2,dtype=int))
14. 常见的矩阵运算    
a1 = mat([1,2])
a2 = mat([[1],[2]])
a3 = a1 * a2
print(a3)
输出:
matrix([[5]])
 
print(a1*2)
输出:
matrix([[2, 4]])
 
a1 = mat(eye(2,2)*0.5)
print(a1.I)
输出:
matrix([[ 2., 0.],
  [ 0., 2.]])
 
 
a1 = mat([[1,2],[2,3],[4,2]])
a1.sum(axis=0)
输出:
matrix([[7, 7]])
a1.sum(axis=1)
输出:
matrix([[3],
  [5],
  [6]])
a1.max() # 求矩阵元素最大值
输出:
4
a1.min() # 求矩阵元素最小值
输出:
1
 
np.max(a1,0) # 求矩阵每列元素最大值
输出:
matrix([[4, 3]])
np.max(a1,1) # 求矩阵每行元素最大值
输出:
matrix([[2],
  [3],
  [4]])
 
 
a = mat(ones((2,2)))
b = mat(eye((2)))
c = hstack((a,b))
输出:
matrix([[ 1., 1., 1., 0.],
  [ 1., 1., 0., 1.]])
d = vstack((a,b))
输出:
matrix([[ 1., 1.],
  [ 1., 1.],
  [ 1., 0.],
  [ 0., 1.]])
15. 矩阵、数组、列表之间的互相转换    
aa = [[1,2],[3,4],[5,6]]
bb = array(aa)
cc = mat(bb)
 
cc.getA() # 矩阵转换为数组
cc.tolist() # 矩阵转换为列表
bb.tolist() # 数组转换为列表
 
 
# 当列表为一维时,情况有点特殊
aa = [1,2,3,4]
bb = array(aa)
输出:
array([1, 2, 3, 4])
cc = mat(bb)
输出:
matrix([[1, 2, 3, 4]])
 
cc.tolist()
输出:
[[1, 2, 3, 4]]
 
bb.tolist()
输出:
[1, 2, 3, 4]
 
cc.tolist()[0]
输出:
[1, 2, 3, 4]
                  数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
教材入口:https://edu.cda.cn/goods/show/3151 “纲举目张,执本末从。” 若想在数据分析领域有所收获,一套合适的学习教材至 ...
2025-11-04【2025最新版】CDA考试教材:CDA教材一级:商业数据分析(2025)__商业数据分析_cda教材_考试教材 (cdaglobal.com) ...
2025-11-04在数字化时代,数据挖掘不再是实验室里的技术探索,而是驱动商业决策的核心能力 —— 它能从海量数据中挖掘出 “降低成本、提升 ...
2025-11-04在 DDPM(Denoising Diffusion Probabilistic Models)训练过程中,开发者最常困惑的问题莫过于:“我的模型 loss 降到多少才算 ...
2025-11-04在 CDA(Certified Data Analyst)数据分析师的工作中,“无监督样本分组” 是高频需求 —— 例如 “将用户按行为特征分为高价值 ...
2025-11-04当沃尔玛数据分析师首次发现 “啤酒与尿布” 的高频共现规律时,他们揭开了数据挖掘最迷人的面纱 —— 那些隐藏在消费行为背后 ...
2025-11-03这个问题精准切中了配对样本统计检验的核心差异点,理解二者区别是避免统计方法误用的关键。核心结论是:stats.ttest_rel(配对 ...
2025-11-03在 CDA(Certified Data Analyst)数据分析师的工作中,“高维数据的潜在规律挖掘” 是进阶需求 —— 例如用户行为包含 “浏览次 ...
2025-11-03在 MySQL 数据查询中,“按顺序计数” 是高频需求 —— 例如 “统计近 7 天每日订单量”“按用户 ID 顺序展示消费记录”“按产品 ...
2025-10-31在数据分析中,“累计百分比” 是衡量 “部分与整体关系” 的核心指标 —— 它通过 “逐步累加的占比”,直观呈现数据的分布特征 ...
2025-10-31在 CDA(Certified Data Analyst)数据分析师的工作中,“二分类预测” 是高频需求 —— 例如 “预测用户是否会流失”“判断客户 ...
2025-10-31在 MySQL 实际应用中,“频繁写入同一表” 是常见场景 —— 如实时日志存储(用户操作日志、系统运行日志)、高频交易记录(支付 ...
2025-10-30为帮助教育工作者、研究者科学分析 “班级规模” 与 “平均成绩” 的关联关系,我将从相关系数的核心定义与类型切入,详解 “数 ...
2025-10-30对 CDA(Certified Data Analyst)数据分析师而言,“相关系数” 不是简单的数字计算,而是 “从业务问题出发,量化变量间关联强 ...
2025-10-30在构建前向神经网络(Feedforward Neural Network,简称 FNN)时,“隐藏层数目设多少?每个隐藏层该放多少个神经元?” 是每个 ...
2025-10-29这个问题切中了 Excel 用户的常见困惑 —— 将 “数据可视化工具” 与 “数据挖掘算法” 的功能边界混淆。核心结论是:Excel 透 ...
2025-10-29在 CDA(Certified Data Analyst)数据分析师的工作中,“多组数据差异验证” 是高频需求 —— 例如 “3 家门店的销售额是否有显 ...
2025-10-29在数据分析中,“正态分布” 是许多统计方法(如 t 检验、方差分析、线性回归)的核心假设 —— 数据符合正态分布时,统计检验的 ...
2025-10-28箱线图(Box Plot)作为展示数据分布的核心统计图表,能直观呈现数据的中位数、四分位数、离散程度与异常值,是质量控制、实验分 ...
2025-10-28在 CDA(Certified Data Analyst)数据分析师的工作中,“分类变量关联分析” 是高频需求 —— 例如 “用户性别是否影响支付方式 ...
2025-10-28