V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  justou  ›  全部回复第 10 页 / 共 12 页
回复总数  238
1 ... 2  3  4  5  6  7  8  9  10  11 ... 12  
2017-02-24 11:04:53 +08:00
回复了 lanjz 创建的主题 程序员 好奇害死猫,记一次小教训。。
@lneoi 然后经验就满了, Level Up
我一直以为是经验条 233
我这儿试了下, 两个都可以用. 转化成 gif imagemagick 要比 ffmpeg 好很多, ffmpeg 的输出有时很诡异, 画面会花, 使用 imagemagick 的时候要把参数 opt 设置为 optimizeplus 或 OptimizeTransparency, 不然 py 可能卡死. 虽然生成的图会大点, 但是效果很好. 想要精确控制的话还是直接调用相应命令行, 传一摞参数进去, moviepy 只提供了简单功能.
把 write_gif 的 program 参数改成'ffmpeg'或者'ImageMagick'试试, 默认的的 imageio 不好用, 兼容性似乎也有问题. 不过要另外去下 ffmpeg 或者 imagemagick 安装
moviepy 用的 ffmpeg, imagemagick 为底层, 可以直接在 py 中调用它们的命令行.
moviepy 有啥问题捏?
2017-02-13 11:02:21 +08:00
回复了 beric 创建的主题 Python 文件名的多语言编码如何统一转换成 utf-8
网页其实也是通过 http 头跟统计来确定编码的, 设计规范的网页都会在 header 里面标注页面编码, 这个信息可以被浏览器利用, 如果编码乱标, 浏览器拿着可能也是乱码, 你可以试试把本页面保存下来, 然后将 html 头的 charset 声明改成 charset=ascii, 然后打开看看会不会乱码; 如果编码缺失, 浏览器会通过某些统计算法来确定编码(像 chardet 一样), 可以将本页面的 charset=utf-8 声明删掉, 再打开看看
2017-02-13 08:00:36 +08:00
回复了 beric 创建的主题 Python 文件名的多语言编码如何统一转换成 utf-8
如果你是从网页内容中提取文件名的, 试试用 chardet 检测整个网页的编码然后使用检测出的编码解码 filename="xxxxx", 一般来讲, 比较规范的网站编码都是统一的, 看看你的浏览器正确显示时用的什么编码就知道了
2017-02-11 10:21:05 +08:00
回复了 beric 创建的主题 Python 文件名的多语言编码如何统一转换成 utf-8
@beric chardet 基于统计检测编码, 样本数不够(比如只有几个字)的时候要么检测不出来, 返回 None, 要么 confidence 很低, 除了基于统计, 目前没有任何有效的算法计算编码
@lyricorpse 那差不多, 我也是做些计算, 数据分析之类的, 物理生→_→
@lyricorpse 我也不是程序员出生, 有做科学计算的需要才开始写程序的

根据个人经验, 要用好 cython 的话需要一定的 c 基础, 要比较熟悉 c 的各种玩法. 我感觉 cython 最大的好处就是把权衡交给程序员, 也可以完全避开 c, 就用 cython 跟 python 的东西, 这几乎可以解决大多数 python 执行效率的问题了, 极少时候, 如果还想继续提升性能, 一般是需要更复杂的并行, 或者无法完全避开 gil 的问题, 就在 cython 中用更多的 c/cpp, 还不行就把这部分完全剥离到 c/cpp 库中完成计算, python 负责预处理后处理, cython 作为桥梁.

反复地看 cython 官方文档, 有空就去逛逛 stackoverflow, 看看相关的问题, 多逛逛相关博客, 不明觉厉的东西要保存下来, 然后逐步的处理, 整理到自己的知识系统, 使用中遇到的问题以及解决方法要详细的记下来, 因为很可能再次遇到, 这时候想起以前遇到过但是忘记解决办法了是很恼火的. 多看看 cython 的相关项目, 因为投身于科学计算, 所以比较关注这方面的库, 比如 cython_gsl, 包装的科学计算库 GNU Scientific Library(GSL); cy_armadillo, 包装 cpp 的 armadillo 库, 都是开源项目, 看这些源码的时候 c/cpp/cython 的熟悉程度是同步提升的, 还有 cython 自带的那些 pxd 是包装 c/cpp 标准库最好的例子. 其实学任何技术都是这个过程吧. cython 的书籍的话我也只有你上面提到的那本.如果你从事科学计算方面, 推荐下张老师 @ruoyu0088, 我是跟着他一路小跑过来的 233, 可以去搜下他的博客, 论坛, 书籍
-------------------------------------------------------------------------------------------------

如果不是已经无法修改的 C 库的话, 建议还是直接放到 cython 中写, 不必写个.c 来包装.

包装那个全局变量的话:
1.c 的头文件声明 float glb_f;
2.pxd 里面也做相应声明 cdef extern from "square.h": float glb_f
3.pyx 里面的修改
cimport square
...
def __init__(self, width, length, global_f=1.0):
square.glb_f = global_f # 从这儿设置这个全局变量
self.s_ptr.width = width
self.s_ptr.length = length
ctypedef struct Square *sq 不符合 cython 语法, 把 struct 去掉

要封装 Square 给 py 的话, 可以在 pyx 中定一个 cdef 的 class, 维护一个指向 struct Square 的指针. 把 cal_area 作为这个 cdef class 的方法

https://gist.github.com/justou/ac94501d664f32872b2ae546099d874c

这是封装 C 库的流程,如果是自定义的扩展模块 ,c/c++ -> cython -> py 这样做其实略繁琐 .
完全可以直接 cython -> py, 简化给 py 写 C 扩展的是 cython 的目的之一.
这种要自己 profile 一下才知道瓶颈在哪里, 光是猜测没用
试试 cProfile, memory_profiler, 以及 line_profiler 这类工具
2016-12-23 18:27:13 +08:00
回复了 toono 创建的主题 Python GUI+多线程+socket+队列,怎么搞,入队阻塞!😂
我看到入队代码有个 time.sleep(4)
可以试试 cython, 更容易维护, 几乎照抄 C/C++头文件, 也有一些自动化工具, 从 .h 直接生成 .pxd

http://docs.cython.org/en/latest/
2016-12-02 17:11:58 +08:00
回复了 fffflyfish 创建的主题 Python 关于 python 并行计算的问题
我实际操作了下你这个问题, 把问题简化成了: 计算图片上到若干像素距离最短的位置, 效率并不算太差啊
到 3, 10, 30, 81 个像素最短距离的计算时间分别是: 160 ms, 460 ms, 1.34 s, 3.55 s, 时间线性递增, 还没用 opencl 试
(注: 当点数过多的时候最短距离的位置不一定只有一个)

https://gist.github.com/justou/b64a0b73fe198a2b6cdb1c72b3459ad8
2016-11-25 21:40:03 +08:00
回复了 fffflyfish 创建的主题 Python 关于 python 并行计算的问题
哦, 我以为就用自己 PC 算...
上面打错了, 想写 opencl, 虽然 opengl 的计算着色器也能完成
图片就是一个矩阵, 放到显卡上, 每个计算单元计算一个像素跟三个元素的距离, 最后得到最短距离跟对应像素, 不需要任何循环
2016-11-25 21:00:32 +08:00
回复了 fffflyfish 创建的主题 Python 关于 python 并行计算的问题
这种问题用 GPU 算比 CPU 并行高效得多
比如 opengl 还有 1L 提到的 cuda, 都有 python 接口
2016-11-15 09:09:12 +08:00
回复了 domino 创建的主题 Python Python3 编码问题
如果不想去动 CMD, 且控制台输出仅做简单观测可以这样:

# -*- encoding: utf-8 -*-

import locale
lc = locale.getpreferredencoding()

s = 'GBK 控制台不能完全显示的表情(*●⁰♊⁰●)ノ'


def show_msg(msg):
# print(msg) # 注释掉后: UnicodeEncodeError: 'gbk' codec can't encode ...
print(msg.encode(lc, 'ignore').decode(lc))

show_msg(s) # GBK 控制台不能完全显示的表情(*●●)

这将忽略掉本地编码不能显示的字符, 如果要精确记录就用 utf8 编码输出到文件
2016-11-13 15:12:43 +08:00
回复了 rogwan 创建的主题 Python 有这样一个 list,怎么把列表中的字典进行排序?
from operator import itemgetter

lst = [ {'student_name': 'zhangsan', 'student_score': 65},
{'student_name': 'lisi', 'student_score': 95},
{'student_name': 'wangwu', 'student_score': 80},
{'student_name': 'maliu', 'student_score': 75},
{'student_name': 'zhuqi', 'student_score': 88} ]

top3 = sorted(lst, key=itemgetter('student_score'), reverse=True)[:3]

print top3
2016-11-09 19:56:58 +08:00
回复了 Tianny 创建的主题 Python 请教大家关于 python 类属性和实例属性的问题,谢谢!
实例属性跟类属性是放在不同的字典里面的, print c1.x, c1.x = 233 这种操作就是字典操作
print c1.__dict__
print Cls.__dict__
2016-11-09 19:51:56 +08:00
回复了 Tianny 创建的主题 Python 请教大家关于 python 类属性和实例属性的问题,谢谢!
这儿跟可变对象和不可变对象没啥关系;
类属性被所有实例共享, 实例都是从某个类(相当于模板)造出来的; 实例属性可各不相同, 还可以动态添加删除

这里是 foo.x=1.7 这种赋值方式的问题, 这会给实例动态添加一个(实例)属性 x, 跟类属性 x 不同
比如 print foo.y 会抛出 AttributeError, 但 foo.y=1 会动态添加一个实例属性 y

修改类属性用类名访问 Foo.x=2, 所有实例读取 x 属性时都是一样的值.(前提是没有被实例属性覆盖)

class Cls(object):
x = 1

c1 = Cls()
c2 = Cls()
print c1.x # 1
print c2.x # 1

Cls.x = 2
print c1.x # 2
print c2.x # 2

c1.x = 233
print c1.x # 233, 先得到实例属性
print c2.x # 2
print Cls.x # 2
1 ... 2  3  4  5  6  7  8  9  10  11 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3839 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 00:53 · PVG 08:53 · LAX 17:53 · JFK 20:53
Developed with CodeLauncher
♥ Do have faith in what you're doing.