0%

python语法

numpy

转成list

1
2
3
4
5
6
import numpy as np
a = np.array([[1,2,3],[3,4,5]])
a = a.tolist()
print(a)
# 输出
[[1, 2, 3], [3, 4, 5]]

由list转化来

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

直接筛选

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

筛选出下标

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
np.where(condition, x, y)

condition:条件
x:满足条件时函数的输出
y:不满足条件时的输出

>>> import numpy as np
>>> x = np.arange(6).reshape(2, 3)
>>> x
array([[0, 1, 2],
[3, 4, 5]])
>>> np.where(x > 1, True, False)
array([[False, False, True],
[ True, True, True]])

没有x和y参数,则以元组形式输出满足条件的列表索引。

>>> np.where(x > 1)
(array([0, 1, 1, 1], dtype=int64), array([2, 0, 1, 2], dtype=int64))

和2类似,但输出的直接是满足要求的元素的坐标索引,不是元组。

>>> np.argwhere(x > 1)
array([[0, 2],
[1, 0],
[1, 1],
[1, 2]], dtype=int64)

list

逐个元素操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
原始列表:

num_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']


目的:

num_list_new = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


方法一:

num_list_new = list(map(lambda x: int(x), num_list)) # num_list为x迭代的list,lambda输入x,输出int(x)


方法二:

num_list_new = list(map(int, num_list))


方法三:

num_list_new = [int(i) for i in num_list]

元素逐个输出,并用逗号隔开

1
2
list1 = [1,2,3,4,5,6,7,8,9,10]
(",".join(str(x) for x in list1))
1
2
3
4
5
6
7
8
9
10
11
12
13
a='jxl'
len(a) #字符串长度
a == 'jxl' and a~= 'jx' #并列条件

#定义一个字符串str1
>>> str1 = "3w.gorly.test.com.cn"
#指定分隔符为'.',并且指定切割次数为1次
>>> print str1.split('.',1)
['3w', 'gorly.test.com.cn']

#一个坑:python里的=是引用
#若想要传值必须写
a = copy.deepcopy(b)

程序计时

1
2
3
4
5
6
import time
T1 = time.time()
#程序

T2 = time.time()
print('程序运行时间:%s毫秒' % ((T2 - T1)*1000))

多线程

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
import threading

class MyThread(threading.Thread):
def __init__(self , threadName, processRange):
super(MyThread,self).__init__(name=threadName)
"""一旦这个MyThread类被调用,自动的就会运行底下的run方法中的代码,
因为这个run方法所属的的MyThread类继承了threading.Thread"""
def run(self):
for nm in nms[processRange]:
if nm.endswith('.exr'):

h = util.PanoramaHandler()
# hdr = h.read_exr(hdr_path)

crop_path = crop_dir + nm
crop = h.read_exr(crop_path)
nm_ = nm.split('.')[0]
crop1 ,aphla = tone(crop)

# 检查有多少全黑图像
if aphla >= 100 or aphla <= 0.01:
crop1 = crop1* 255.0
crop1 = Image.fromarray(crop1.astype('uint8'))
print(nm_,' ',aphla)
crop1.save('./tmp/{}_crop_alpha={}.png'.format(nm_,aphla))

#线程数量
thrNum = 20
slic = int(len(nms)/thrNum)

for i in range(thrNum):
processRange = slice(i*slic,(i+1)*slic)
MyThread("MyThreadName:" + str(i),processRange=processRange).start()

  • 通过setup.py来安装python模块,记录产生了哪些文件夹以便卸载
1
2
3
4
5
## 记录安装日志
# 安装jieba
python setup.py install --record logName
## 卸载的时候使用日志文件logName
cat logName | xargs rm -rf
  • python调用matlab打包好的模块
  1. 安装matlab运行库,并把路径写入$PATH这样才不会报找不到运行库的错
  2. 将matlab代码编译出来后,用对应python在编译出的文件夹for_redistribution_files_only下运行python setup.py install --record logName。即可到python中调用该模块。