我正在使用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 库中定义了一个函数,如下所示:
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)
我的代码有什么问题?谢谢大家帮助我!!!
例如,我使用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值的解决方案.但我希望能保存一个灰度数字.谢谢大家的帮助!
我正在使用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
我的代码的实现或错误会发生什么.
我正在尝试绘制多个热图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) 我有一个保存在 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)
打印信息显示正确的网络。
我的代码有什么问题?
谢谢!
以下是我的代码:
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 个孩子,每个孩子都包含几个后代。我的代码有什么问题?谢谢大家帮助我!
我使用的是 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)
我已经被这个问题困扰了好几个小时了。谢谢大家对我的帮助!!!
我正在绘制多个热图.代码如下:
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) 我正在尝试将时间字符串"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)
我的代码出了什么问题?谢谢大家的帮助!
我正在使用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文本目录后,是否需要进一步配置?谢谢大家的帮助!
python ×9
matplotlib ×3
arrays ×2
c ×2
c++ ×2
numpy ×2
cmake ×1
ctypes ×1
cuda ×1
datetime ×1
django ×1
django-mptt ×1
malloc ×1
memory ×1
opencv ×1
shuffle ×1
string ×1
sublimetext3 ×1
tensorflow ×1