小编pfc*_*pfc的帖子

为什么当内存足够时malloc()会失败?

我正在使用128GB内存的服务器来进行一些计算.我需要malloc()一个大小为56120*56120的2D float数组.示例代码如下:

int main(int argc, char const *argv[])
{
    float *ls;
    int num = 56120,i,j;
    ls = (float *)malloc((num * num)*sizeof(float));
    if(ls == NULL){
        cout << "malloc failed !!!" << endl;
        while(1);
    }
    cout << "malloc succeeded ~~~" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码编译成功,但是当我运行它时,它说"malloc failed !!!".据我计算,只需要大约11GB的内存来容纳整个阵列.在我开始代码之前,我检查了服务器,并且有110GB的可用内存.为什么会发生错误?

我还发现,如果我减少num到40000,那么malloc将会成功.

这是否意味着可以分配的最大内存有限制malloc()

而且,如果我改变分配方式,直接声明这样大小的2D float数组,如下:

int main(int argc, char const *argv[])
{
    int num = 56120,i,j;
    float ls[3149454400];
    if(ls == NULL){
        cout << "malloc failed !!!" << …
Run Code Online (Sandbox Code Playgroud)

c c++ memory malloc

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

ctypes.ArgumentError:不知道如何转换参数

我在 C 库中定义了一个函数,如下所示:

int* Test(char *str1,int id1,char *str2,float val,float *ls)
Run Code Online (Sandbox Code Playgroud)

我想在python中使用它,所以我编写了以下python代码:

str1 = 'a'
str2 = 'b'
id1 = 0
val = 1.0
system('g++ -c -fPIC libtraj.cpp -o test.o')
system('g++ -shared -Wl,-soname,test.so -o test.so test.o')
lib = cdll.LoadLibrary('./test.so')
num_item = 100000
ls = (ctypes.c_float * num_item)()
lib.Test.restype = ndpointer(dtype=ctypes.c_int, shape=(num_item,))
lib.Test.argtypes = [c_char_p]
a = create_string_buffer(str1)
b = create_string_buffer(str2)
ls_id = lib.Test(a,id1,b,val,ctypes.byref(ls))
Run Code Online (Sandbox Code Playgroud)

然后我运行这个python程序。我遇到错误说:

ls_id = lib.Test(a,id1,b,val,ctypes.byref(ls))
ctypes.ArgumentError: argument 4: <type 'exceptions.TypeError'>: Don't know how to convert parameter 4
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?谢谢大家帮助我!!!

c python ctypes python-c-extension

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

如何将灰度matplotlib图保存到numpy数组

例如,我使用matplotlib绘制图形如下:

plt.figure(figsize=(10,10))
plt.imshow(output_fig, zorder=0,cmap="gray")
plt.scatter(x,y,color='k')
Run Code Online (Sandbox Code Playgroud)

如果我使用:

plt.savefig(figname,fotmat=figtype)
Run Code Online (Sandbox Code Playgroud)

我将它保存为图形文件.但是,我想将它保存到矩阵或numpy数组中,这样每个元素都可以保存图中每个像素的比例值.我怎样才能做到这一点?我找到了保存RGB值的解决方案.但我希望能保存一个灰度数字.谢谢大家的帮助!

python arrays numpy matplotlib

5
推荐指数
1
解决办法
2252
查看次数

python:为什么random.shuffle会更改数组

我正在使用random.shuffle洗牌2D numpy数组.我遇到了以下问题:

import numpy as np
from random import shuffle as sf 

b = np.array([1,2,3,4,5])
print b
# [1 2 3 4 5]
sf(b)
print b
# [1 4 5 3 2]

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print a
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
sf(a)
print a
# [[1 2 3]
#  [4 5 6]
#  [1 2 3]]
Run Code Online (Sandbox Code Playgroud)

结果表明,当改组一维数组时,一切都是正确的.但是在改组2D阵列时,结果变得奇怪.

为什么抛弃原始数组的第三行并将第一行重复两次?

我知道可以有解决方案来解决这个问题,例如首先洗牌指示行ID的一维数组,然后按照混洗ID的顺序提取二维数组.但我确实希望弄清楚random.shuffle我的代码的实现或错误会发生什么.

python arrays numpy shuffle

5
推荐指数
1
解决办法
1713
查看次数

Matplotlib:如何为每个子图添加xlabel,title

我正在尝试绘制多个热图plt.subplots.我发现的一个例子如下:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((4,10,10))
data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None]

# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=1, ncols=4,figsize=(12,3))
i=0
for dat, ax in zip(data, axes.flat):
    # The vmin and vmax arguments specify the color limits
    im = ax.imshow(dat, vmin=0, vmax=2,cmap='Reds')
    # ax.xlabel(str(i))
    # ax.ylabel(str(i)) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

5
推荐指数
1
解决办法
4978
查看次数

如何计算从 pb 文件加载的张量流模型的触发器

我有一个保存在 pb 文件中的模型。我希望计算它的失败。我的示例代码如下:

import tensorflow as tf
import sys
from tensorflow.python.platform import gfile

from tensorflow.core.protobuf import saved_model_pb2
from tensorflow.python.util import compat

pb_file = 'themodel.pb'

run_meta = tf.RunMetadata()
with tf.Session() as sess:
    print("load graph")
    with gfile.FastGFile(pb_path,'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')
        flops = tf.profiler.profile(tf.get_default_graph(), run_meta=run_meta,
            options=tf.profiler.ProfileOptionBuilder.float_operation())
        print("test flops:{:,}".format(flops.total_float_ops))
Run Code Online (Sandbox Code Playgroud)

打印信息很奇怪。我的模型有几十层,但它在打印信息中只报告了 18 次失败。我很确定模型已正确加载,因为如果我尝试按如下方式打印每个图层的名称:

print([n.name for n in tf.get_default_graph().as_graph_def().node])
Run Code Online (Sandbox Code Playgroud)

打印信息显示正确的网络。

我的代码有什么问题?

谢谢!

python tensorflow

5
推荐指数
1
解决办法
1548
查看次数

在django中,如何序列化mptt树?

以下是我的代码:

class File(MPTTModel):
    name=models.CharField(max_length=36, primary_key=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
    num=models.IntegerField(null=True)
    class MPTTMeta:
        order_insertion_by = ['name']
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码序列化此类:

class RecursiveField(serializers.Serializer):
    def to_representation(self, value):
        serializer = self.parent.parent.__class__(value, context=self.context)
        return serializer.data

class FileSerializer(serializers.ModelSerializer):
    parent=RecursiveField(many=True)
    class Meta:
        model = File
        fields=('name','num','parent')
Run Code Online (Sandbox Code Playgroud)

但我失败了,我只能输出这棵树的根节点的内容。似乎序列化器无法访问根的孩子,进一步访问孩子的孩子......具体问题是在输出中, 'parent' 显示为 'null',但实际上它有 4 个孩子,每个孩子都包含几个后代。我的代码有什么问题?谢谢大家帮助我!

python django django-mptt

4
推荐指数
1
解决办法
2513
查看次数

如何设置python的默认库路径

我使用的是 Centos 7.2 64 位。python的默认版本是2.7.5。我安装的anaconda版本是2.7.13。bin当我将anaconda 的路径添加到变量中时,python 的默认解释器设置为 2.7.13 PATH。但是,当我安装时opencv,我在执行以下操作时收到此警告消息cmake

Could NOT find PythonLibs: Found unsuitable version "2.7.5", but required is exact version "2.7.13" (found /lib64/libpython2.7.so)
Run Code Online (Sandbox Code Playgroud)

看来python库的默认路径是/lib64/libpython2.7.so. 我搜索了解决方案,它说如果我设置环境变量PYTHON_LIBRARY,就会解决这个问题。所以我添加如下:

export PYTHON_LIBRARY=/ghome/mypath/anaconda2/lib/libpython2.7.so
Run Code Online (Sandbox Code Playgroud)

我重新登录。问题仍然发生。我的cmake命令如下:

cmake -D BUILD_opencv_gpu=OFF -D WITH_CUDA=OFF -D WITH_1394=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/ghome/mypath/software/try_opencv/installed ..
Run Code Online (Sandbox Code Playgroud)

我已经被这个问题困扰了好几个小时了。谢谢大家对我的帮助!!!

python opencv cmake

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

Matplotlib:如何去除热图中的白线

我正在绘制多个热图.代码如下:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
FONTSIZE=20
fig, axes = plt.subplots(nrows=1, ncols=4,figsize=(12,3))
k=0
for ax in axes.flat:
    mat = np.zeros((10,10)) + 0.5
    im = ax.imshow(mat,interpolation='nearest', vmin=0.0, vmax=1.0,cmap='Reds')
    ax.set_xlim([-0.5, 9.0 + 0.5])
    ax.set_ylim([-0.5, 9.0 + 0.5])
    ax.set_xticks([0,5])
    ax.set_yticks([0,5])
    ax.set_xlabel('X',fontsize=FONTSIZE)
    if k == 0:
        ax.set_ylabel('Y',fontsize=FONTSIZE)
    ax.set_title('Title')
    k += 1
# Make an axis for the colorbar on the right side
cax = fig.add_axes([0.99, 0.235, 0.03, 0.682])
cbar = fig.colorbar(im, cax=cax,ticks=[0.0,0.1,0.2,0.3,0.4])
cbar.ax.set_yticklabels(['0.0','0.1','0.2','0.3','0.4'])
figtype = 'jpg'
fig.tight_layout() …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

Python格式化时间字符串到datetime对象

我正在尝试将时间字符串"2016-01-01 00:00:00"格式化为日期时间对象.我尝试了以下代码:

from datetime import datetime
a = '2016-01-01 00:00:00'
d = datetime.strptime(a,'%Y%m%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息说:

ValueError: time data '2016-01-01 00:00:00' does not match format '%Y%m%d %H:%M:%S'
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?谢谢大家的帮助!

python string datetime

2
推荐指数
1
解决办法
1859
查看次数

如何使sublime文本突出显示CUDA C++语法

我正在使用Sublime Text 3来编写CUDA C++程序.但是当我创建.cu文件并使用Sublime Text打开它时,Sublime Text不会突出显示语法.我在这里安装了包

https://github.com/harrism/sublimetext-cuda-cpp
Run Code Online (Sandbox Code Playgroud)

我转到Sublime Text目录,git存储库并重新启动Sublime Text.然而,没有任何改变.怎么了?在将存储库git到sublime文本目录后,是否需要进一步配置?谢谢大家的帮助!

c++ cuda sublimetext3

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