我是一名C编码员,用python开发一些东西.我知道该怎么做在C以下(因此在应用于蟒类似C的逻辑),但我不知道做什么的"Python的"事情是这样的.
我有一个字典d,我想操作一个项目的子集,只有那些键(字符串)包含一个特定的子字符串.
即C逻辑将是:
for key in d:
if filter_string in key:
# do something
else
# do nothing, continue
Run Code Online (Sandbox Code Playgroud)
我想象python版本会是这样的
filtered_dict = crazy_python_syntax(d, substring)
for key,value in filtered_dict.iteritems():
# do something
Run Code Online (Sandbox Code Playgroud)
我在这里发现了很多关于过滤字典的帖子,但找不到一个涉及到这个的字典.
我的字典没有嵌套,我正在使用python 2.7
在我的台式电脑上,我安装了anaconda,并在我的笔记本电脑上 - 为了节省空间 - 我想我会安装miniconda并选择我安装的模块.所以我安装了一些,numpy,scipy等.我没有安装任何不属于默认anaconda安装的东西,但我刚刚意识到我的miniconda安装占用的空间比anaconda安装更多!(1.8GB对2.2GB).(两者都没有环境)
差异的大部分来自pkgs文件夹.miniconda安装似乎有所有已安装软件包的tar.bz2以及爆炸版本.删除这些是否安全?它们会在一段时间后自动删除吗?有没有选项不缓存这些?
PS我正在开发Windows和Mac(我已经尝试在mac和windows上安装anaconda和miniconda来查看,我得到了非常相似的结果).
我想连接到相机,并且只在事件发生时捕获帧(例如按键).我想做的简化版本是这样的:
cap = cv2.VideoCapture(device_id)
while True:
if event:
img = cap.read()
preprocess(img)
process(img)
cv.Waitkey(10)
Run Code Online (Sandbox Code Playgroud)
但是,cap.read似乎只捕获队列中的下一帧,而不是最新的帧.我在网上做了很多搜索,似乎有很多问题,但没有明确的答案.只有一些脏的黑客涉及在抓取之前和之后打开和关闭捕获设备(这对我不起作用,因为我的事件可能每秒触发多次); 或者假设一个固定的帧率并在每个事件上读取固定的n次(这对我不起作用,因为我的事件是不可预测的并且可能在任何时间间隔发生).
一个很好的解决方案是:
while True:
if event:
while capture_has_frames:
img = cap.read()
preprocess(img)
process(img)
cv.Waitkey(10)
Run Code Online (Sandbox Code Playgroud)
但是capture_has_frames是什么?有可能得到这些信息吗?我试着查看CV_CAP_PROP_POS_FRAMES,但它总是-1.
现在我有一个单独的线程,其中捕获以全fps运行,而在我的事件中,我正在抓取该线程的最新图像,但这似乎有点过分.
(我用的是Ubuntu 16.04顺便说一句,但我想这应该没关系.我也使用pyqtgraph进行显示)
我有一个包含超过100,000个文件的文件夹,所有文件都使用相同的存根编号,但没有前导零,并且数字并不总是连续的(通常它们是,但是有间隙)例如:
file-21.png,
file-22.png,
file-640.png,
file-641.png,
file-642.png,
file-645.png,
file-2130.png,
file-2131.png,
file-3012.png,
Run Code Online (Sandbox Code Playgroud)
等等
我想批量处理它来创建填充的,连续的文件.例如:
file-000000.png,
file-000001.png,
file-000002.png,
file-000003.png,
Run Code Online (Sandbox Code Playgroud)
当我用for filename in os.listdir('.'):文件解析文件夹时,我不想按顺序出现.可以理解他们出现了
file-1,
file-1x,
file-1xx,
file-1xxx,
Run Code Online (Sandbox Code Playgroud)
等等
file-2,
file-2x,
file-2xx,
Run Code Online (Sandbox Code Playgroud)
我怎么能按数值的顺序让它通过?我是一个完整的python noob,但是看着文档,我猜我可以使用map创建一个新的列表,只过滤掉数字部分,然后对该列表进行排序,然后迭代它?有超过100K的文件,这可能很重.欢迎任何提示!
我想在C++ API中限制GPU分配的tensorflow.我知道如何在python中做到这一点,它可能与传递给NewSession()的struct SessionOptions有关,但是我找不到更多关于如何做的具体信息.
编辑:Stackoverflow表明我的问题是重复的.但是我已经链接到其他帖子了.这是如何在python中做到这一点.我特别想问如何用C++做.
我有一个AVPlayerLayer,我想创建一个OpenGL纹理.我对opengl纹理很满意,甚至可以将CGImageRef转换为opengl纹理.在我看来,下面的代码应该可行,但我只是简单的黑色.我究竟做错了什么?我是否需要先在CALayer/AVPlayerLayer上设置任何属性?
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
int width = (int)[layer bounds].size.width;
int height = (int)[layer bounds].size.height;
CGContextRef context = CGBitmapContextCreate(NULL,
width,
height,
8,
width * 4,
colorSpace,
kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
if (context== NULL) {
ofLog(OF_LOG_ERROR, "getTextureFromLayer: failed to create context 1");
return;
}
[[layer presentationLayer] renderInContext:context];
CGImageRef cgImage = CGBitmapContextCreateImage(context);
int bytesPerPixel = CGImageGetBitsPerPixel(cgImage)/8;
if(bytesPerPixel == 3) bytesPerPixel = 4;
GLubyte *pixels = (GLubyte *) malloc(width * height * bytesPerPixel);
CGContextRelease(context);
context = CGBitmapContextCreate(pixels,
width,
height,
CGImageGetBitsPerComponent(cgImage),
width * bytesPerPixel,
CGImageGetColorSpace(cgImage),
kCGImageAlphaPremultipliedLast); …Run Code Online (Sandbox Code Playgroud) 我是ARC的新手,但了解它是如何工作的,我正在尝试它.我在iOS上,所以内存是一个严重的问题.
我有一个包含大量数据的MyObject类.我想释放它,并加载一组新数据.
MyObject *object;
object = [[MyObject alloc] initWithData:folder1]; // load data from folder1
// later...
object = [[MyObject alloc] initWithData:folder2]; // load data from folder2
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作而不会泄漏,我猜测ARC在新分配之前插入了[对象发布].我的问题是在分配新集合后释放'object'中的数据,并且我的内存不足.我真正希望能做的是:
object = nil;
<function to pop the pool, wait till everything is deallocated>
object = [MyObject alloc] initWithData:folder2]; // load data from folder2
Run Code Online (Sandbox Code Playgroud)
但我不知道该怎么做.我可以在延迟后在一个执行选择器上运行新的分配,但感觉就像我在黑暗中拍摄并且有点黑客攻击.可能有一个正确的方法来做到这一点?
PS我试过寻找答案,但所有结果都是关于内存泄漏以及如何确保变量超出范围并将变量设置为nil等等.我的问题不在于此,更多的是时间问题.
更新
感谢您的回答,我已经尝试过了
object = nil;
object = [MyObject alloc] initWithData:folder2];
Run Code Online (Sandbox Code Playgroud)
它没有奏效.我不确定是否应该这样做.现在我明白了,这是应该工作,但是我必须有别的东西抓着它的第二个的那部分.我在所有的init/dealloc方法中都有NSLog,我可以首先看到被调用的新类实例(MyObject的ivars)的所有内容,然后几乎立即(在几毫秒内),MyObject的dealloc其次是伊利亚斯的deallocs.我也尝试了@autorelease,但同样的事情发生了.
我在整个项目中搜索并粘贴了我认为可能与此相关的所有代码.
@interface AppDelegate : UIResponder <UIApplicationDelegate>;
@property PBSoundSession *soundSession;
@end
//-------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我想使用在第二维向量(大小:4)上运行的自定义谓词,沿着第一维(大小:n)对我的numpy形状[n,4]数组进行排序.我想做的C++版本如下,真的非常简单.我已经看到如何使用python列表执行此操作,但我找不到使用numpy数组执行此操作的语法.这可能吗?关于np的文档.排序,np.argsort,np.lexsort没有提到自定义谓词.
// c++ version
vector< float[4] > v = init_v();
float[4] p = init_p();
std::sort(v.begin(), v.end(), [&p](const auto& lhs, const auto& rhs) {
return myfn(p, lhs) > myfn(p, rhs); });
Run Code Online (Sandbox Code Playgroud)
编辑:下面是我想用于排序的python代码.即对于我的阵列的每个'行'(n:4),我将计算欧几里德3D距离(即仅前3列)的平方到固定点.
# these both operate on numpy vectors of shape [4] (i.e. a single row of my data matrix)
def dist_sq(a,b):
d = a[:3]-b[:3]
return np.dot(d*d)
def sort_pred(lhs, rhs, p):
return dist_sq(lhs, p) > dist_sq(rhs, p)
Run Code Online (Sandbox Code Playgroud) 我有一个std :: Poco :: Any的地图,我正在尝试迭代并输出到流但我得到编译器错误.我的代码如下:
map<string, Poco::Any>::const_iterator it;
map<string, Poco::Any>::const_iterator end = _map.end();
map<string, Poco::Any>::const_iterator begin = _map.begin();
for(it = begin; it != end; ++it) {
const std::type_info &type = it->second.type();
// compile error here:
os << " " << it->first << " : " << Poco::RefAnyCast<type>(it->second) << endl;
}
Run Code Online (Sandbox Code Playgroud)
该行有2个错误:
'type' cannot appear in a constant-expression
no matching function for call to 'RefAnyCast(Poco::Any&)'
Run Code Online (Sandbox Code Playgroud)
更新:
我知道模板是编译时间,而type()是运行时因此不起作用.谢谢你强调这一点.此外,DynamicAny将无法工作,因为它只接受具有DynamicAnyHolder实现的类型,并不理想.我想对这些类型强加的唯一规则是它们有<<重载.
下面是我目前正在做的,在某种程度上工作,但只转储已知类型,这不是我想要的.
string toJson() const {
ostringstream os;
os << endl << "{" << endl; …Run Code Online (Sandbox Code Playgroud) 我在“ msa”命名空间下组织了许多小型utils模块,因此可以在许多不同的研究项目中使用。目前,我将它们组织成这样:
# folder structure:
packages <-- in my pythonpath
--msa
----msa_utils.py
----msa_geom.py
----msa_pyglet.py
----msa_math.py
----etc
# imported and used this like
from msa import msa_pyglet
from msa import msa_math
msa_pyglet.draw_rect(msa_math.lerp(...))
Run Code Online (Sandbox Code Playgroud)
但是,我想避免名称中的“ msa_”,而是这样使用:
# folder structure:
packages <-- in my pythonpath
--msa
----utils.py
----geom.py
----pyglet.py
----math.py
----etc
# imported and used this like
import msa.pyglet
import msa.math
msa.pyglet.draw_rect(msa.math.lerp(...))
Run Code Online (Sandbox Code Playgroud)
从外部导入时,这不会引起名称冲突,但是,当模块本身导入名称冲突的模块时,就会发生名称冲突。例如,msa / pyglet需要导入pyglet(外部的),但最终尝试导入自身。同样,任何尝试导入标准数学库的模块都只会导入我的数学模块。这都是可以理解的。但是,处理这种问题的常用pythonic方法是什么?我必须给每个模块文件一个全局唯一的名称吗?
python ×6
c++ ×2
dictionary ×2
ios ×2
anaconda ×1
any ×1
arrays ×1
avfoundation ×1
batch-rename ×1
calayer ×1
camera ×1
cocoa-touch ×1
file-rename ×1
filtering ×1
miniconda ×1
module ×1
numpy ×1
objective-c ×1
opencv ×1
opencv3.0 ×1
opengl-es ×1
python-2.7 ×1
sorting ×1
stl ×1
tensorflow ×1