小编use*_*262的帖子

如何在c中指定64位整数

我正在尝试在C中使用64位整数,但我得到的混合信号是否应该是可能的.

当我执行printf时:

printf("Size of long int:%d\nSize of long long int:%d\n\n",(int)sizeof(long int), (int)sizeof(long long int));
Run Code Online (Sandbox Code Playgroud)

我得到的回应是:

long int的大小:4 long long int的大小:8

这让我觉得long long int有8个字节= 64位.

但是,当我尝试声明以下变量时:

long long int a2 = 0x00004444;
long long int b2 = 0x000044440;
long long int c2 = 0x0000444400;
long long int d2 = 0x00004444000;
long long int e2 = 0x000044440000;
long long int f2 = 0x0000444400004;
long long int g2 = 0x00004444000044;
long long int h2 = 0x000044440000444;
long long int i2 = 0x0000444400004444;
Run Code Online (Sandbox Code Playgroud)

最后4个变量(f2,g2,h2,i2)给出了错误信息: …

c 64-bit sizeof

51
推荐指数
4
解决办法
13万
查看次数

Python的垃圾收集器如何检测循环引用?

我试图了解Python的垃圾收集器如何检测循环引用.当我查看文档时,我看到的只是一个声明,即检测到循环引用,除非涉及的对象有__del__方法.

如果发生这种情况,我的理解(可能是错误的)是gc模块通过(我假设)遍历所有分配的内存并释放任何无法访问的块来充当故障保护.

在使用gc模块之前,Python如何检测和释放循环内存引用?

python garbage-collection cpython

33
推荐指数
3
解决办法
1万
查看次数

Theano.function中'givens'变量的用途

我正在阅读http://deeplearning.net/tutorial/logreg.html上给出的逻辑函数的代码.我对函数的inputs&givens变量之间的区别感到困惑.计算模型在小批量上所犯错误的函数是:

 test_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: test_set_x[index * batch_size: (index + 1) * batch_size],
            y: test_set_y[index * batch_size: (index + 1) * batch_size]})

validate_model = theano.function(inputs=[index],
        outputs=classifier.errors(y),
        givens={
            x: valid_set_x[index * batch_size:(index + 1) * batch_size],
            y: valid_set_y[index * batch_size:(index + 1) * batch_size]})
Run Code Online (Sandbox Code Playgroud)

为什么不能/不会只创建x&y共享输入变量并在创建实际模型实例时定义它们?

theano

21
推荐指数
1
解决办法
5730
查看次数

PyArg_ParseTupleAndKeywords如何工作?

我一直在努力学习如何为Python编写C扩展,并希望确定我理解PyArg_ParseTupleAndKeywords的工作原理.

我相信第一个参数是一个PyObject指针,它指向一个参数数组,这些参数按照它们传递的顺序传递给C-extension函数.第二个参数是传递的关键字列表,它们被传递的位置,以及非常可能的某种指示标记,告诉关键字开始和位置变得无关紧要.

然后,PyArg_ParseTupleAndKeywords使用其关键字列表(第四个参数)来映射用关键字指定的参数,以及格式字符串(第三个参数)和应该复制适当值的C变量(第五个和+参数)的地址.

我的理解是否正确?当我阅读在线文档时,我所看到的只是对"位置参数和关键字参数"的引用,这让我感到有些不知所措.处理PyArg_ParseTupleAndKeywords的Python解释器的文件在哪里?

python python-c-api python-c-extension

17
推荐指数
2
解决办法
6176
查看次数

PyMODINIT_FUNC和PyModule_Create之间的区别

如果我理解正确,

  1. Python 2.X PyModule_Create中的PyMODINIT_FUNC 已被Python3.X 取代
  2. PyObject*然而,两者都返回Python 3.X,模块的初始化函数必须返回PyObject*模块 - 即

    PyMODINIT_FUNC
    PyInit_spam(void)
    {
       return PyModule_Create(&spammodule);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    而在Python2.X中,这不是必要的 - 即

    PyMODINIT_FUNC
    initspam(void)
    {
      (void) Py_InitModule("spam", SpamMethods);
    }
    
    Run Code Online (Sandbox Code Playgroud)

所以,我的理智检查问题是:

  • 我的理解是否正确?
  • 为什么要做出这种改变?

现在,我只是在尝试非常简单的Python C扩展案例.也许如果我做得更多,那么答案就很明显,或者如果我试图将Python嵌入其他东西......

python python-c-extension python-3.x

13
推荐指数
1
解决办法
4982
查看次数

如何在没有写/读的情况下在Python中执行JPEG压缩

我想直接使用压缩的JPEG图像.我知道使用PIL/Pillow我可以在保存时压缩图像,然后回读压缩图像 - 例如

from PIL import Image
im1 = Image.open(IMAGE_FILE)
IMAGE_10 = os.path.join('./images/dog10.jpeg')
im1.save(IMAGE_10,"JPEG", quality=10)
im10 = Image.open(IMAGE_10)
Run Code Online (Sandbox Code Playgroud)

但是,我想要一种方法来做到这一点,而无需无关的写和读.是否有一些Python包带有一个函数,它将图像和质量数作为输入并返回具有给定质量的图像的jpeg版本?

python jpeg image pillow

13
推荐指数
2
解决办法
2万
查看次数

如何在Python中使用cv2显示图像

我一直在使用代码来显示电影中的帧.代码的基本内容如下:

import cv2
import matplotlib.pyplot as plt

# Read single frame avi
cap = cv2.VideoCapture('singleFrame.avi')
rval, frame = cap.read()

# Attempt to display using cv2 (doesn't work)
cv2.namedWindow("Input")
cv2.imshow("Input", frame)

#Display image using matplotlib (Works)
b,g,r = cv2.split(frame)
frame_rgb = cv2.merge((r,g,b))
plt.imshow(frame_rgb)
plt.title('Matplotlib') #Give this plot a title, 
                        #so I know it's from matplotlib and not cv2
plt.show()
Run Code Online (Sandbox Code Playgroud)

因为我可以使用matplotlib显示图像,所以我知道我已经成功阅读了它.

我不明白为什么我创建窗口并尝试使用cv2显示图像不起作用.没有cv2窗口出现.奇怪的是,如果我创建第二个cv2窗口,会出现"输入"窗口,但它只是一个空白/白色窗口.

我在这里错过了什么?

python opencv matplotlib

12
推荐指数
4
解决办法
4万
查看次数

使用conda安装软件包如何更改我的python版本并删除co​​nda?

我一直在将蟒蛇与蟒蛇2.7一起使用

$ python
Python 2.7.14 |Anaconda custom (64-bit)| (default, Dec  7 2017, 17:05:42) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)

当我决定安装tensorflow时(由于某种原因,我使用了非gpu版本)

我使用的命令是:

$ conda install -c anaconda tensorflow-gpu
Run Code Online (Sandbox Code Playgroud)

但是,完成后(此cmd的输出详细信息如下),我不再需要conda了:

$ conda install -c conda-forge keras
Traceback (most recent call last):
  File "/home/me/anaconda2/bin/conda", line 12, in <module>
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'
Run Code Online (Sandbox Code Playgroud)

(注意:我也不再拥有Keras),现在正在运行Python 3.7(!?):

$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", …
Run Code Online (Sandbox Code Playgroud)

anaconda conda

12
推荐指数
1
解决办法
3074
查看次数

Python C Extensions - 为什么必须可调用的C函数接受参数并返回PyObject*

我刚刚开始使用Python C扩展,并且很好奇为什么可以从Python调用的C函数必须使用2个PyObject*参数并返回PyObject*.我写了以下"Hello World"扩展:

#include <Python.h>

static PyObject *
hello_world(PyObject *self, PyObject *noargs)
{
   printf("Hello World\n");
   return Py_BuildValue("");
}


// Module functions table.

static PyMethodDef
module_functions[] = {
    { "hello_world", hello_world, METH_NOARGS, "hello world method" },
    { NULL }
};


// This function is called to initialize the module.
PyMODINIT_FUNC
inittesty2(void)
{
    Py_InitModule("testy2", module_functions);
}
Run Code Online (Sandbox Code Playgroud)

为什么我(特别是使用METH_NOARGS)不能使用以下hello_world方法:

static void
hello_world()
{
   printf("Hello World\n");
}
Run Code Online (Sandbox Code Playgroud)

c python python-c-extension

7
推荐指数
1
解决办法
2418
查看次数

Python C扩展 - 为什么使用关键字参数的方法强制转换为PyCFunction

我正在学习Python-C扩展,并且很困惑为什么使用关键字参数的方法必须强制转换为PyCFunctions.

我对PyCFunction的理解是它需要两个指向PyObjects的指针并返回一个指向PyObject的指针 - 例如

 PyObject* myFunc(PyObject* self, PyObject* args)
Run Code Online (Sandbox Code Playgroud)

如果我要使用一个使用关键字参数的函数,那么这个函数将使用三个指向PyObjects的指针并返回一个指向PyObject的指针 - 例如

 PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs)
Run Code Online (Sandbox Code Playgroud)

但是,当我创建模块函数数组时(对于一个名为'adder'的函数):

{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }
Run Code Online (Sandbox Code Playgroud)

工作良好.感觉就像我将一个浮点数转换为int并仍然使用浮点数的非整数部分.如果我没有看到这项工作,我会认为它不会起作用.我在这里不理解什么?

此外,我看到一些PyCFunctionWithKeywords的引用,它似乎有我认为我需要的函数签名,但我的编译器抱怨(发出警告)'不兼容的指针类型'.

是不是弃用了PyCFunctionWithKeywords?如果没有,是否有时间我应该/必须使用它?

python python-c-extension

7
推荐指数
1
解决办法
1934
查看次数