Python和Matlab的差异#

这里列举了一些Python和Matlab的差异。Python在执行方式上接近于matlab,然而在Tensor的索引方式上会和C++一样。

控制语句#

for i in range(10):
    if i%2==0:
        print(f"even:{i}")
    else:
        print(f"odd:{i}")
even:0
odd:1
even:2
odd:3
even:4
odd:5
even:6
odd:7
even:8
odd:9

定义函数#

def fib(n):
    if n==1 or n==2:
        return 1
    return fib(n-1)+fib(n-2)
for i in range(1,10):
    print(fib(i))
1
1
2
3
5
8
13
21
34

张量运算#

创建张量#

import numpy as np

N=3*4*5
a=np.ones((N,N))
b=np.arange(0,N)

形状#

print("vector B:\n",b)
B=b.reshape((3,4,5))
print("tensor B:\n",B)
vector B:
 [ 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
 48 49 50 51 52 53 54 55 56 57 58 59]
tensor B:
 [[[ 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]
  [30 31 32 33 34]
  [35 36 37 38 39]]

 [[40 41 42 43 44]
  [45 46 47 48 49]
  [50 51 52 53 54]
  [55 56 57 58 59]]]

索引#

print(B[0,1,2])
print(B[0][1][2])
7
7

切片#

B[0:2,:,:]
B[[0,2],:,:]
B[...,0:1]
B[None,...]

s=slice(0,2,1)
B[s,s,s]
array([[[ 0,  1],
        [ 5,  6]],

       [[20, 21],
        [25, 26]]])

张量合并#

A1=np.ones((3,5))
A2=np.ones((3,5))

AA=np.concatenate([A1,A2],axis=0)
print(AA.shape)

AA2=np.concatenate([A1,A2],axis=1)
print(AA2.shape)

AA3=np.stack([A1,A2],axis=1)
print(AA3.shape)
(6, 5)
(3, 10)
(3, 2, 5)

读取与保存#

### 打开文件

f=open("a.txt",'w')
f.close()

### 保存数组,读取数组
np.savez("A1.npz",A1=A1,A2=A2)
A1=np.load("A1.npz")["A1"]

Lambda 函数#

add=lambda x,y:x+y
add(3,4)
7