首先,我觉得这是一个愚蠢的问题,抱歉.目前,我发现计算最佳比例因子(目标像素数的最佳宽度和高度,同时保持纵横比)的最准确方法是迭代并选择最佳比例,但必须有更好的方法.
一个例子:
import cv2, numpy as np
img = cv2.imread("arnold.jpg")
img.shape[1] # e.g. width  = 700
img.shape[0] # e.g. height = 979
# e.g. Total  pixels : 685,300
TARGET_PIXELS = 100000
MAX_FACTOR    = 0.9
STEP_FACTOR   = 0.001
iter_factor   = STEP_FACTOR
results       = dict()
while iter_factor < MAX_RATIO:
     img2 = cv2.resize(img, (0,0), fx=iter_factor, fy=iter_factor)
     results[img2.shape[0]*img2.shape[1]] = iter_factor
     iter_factor += step_factor
best_pixels = min(results, key=lambda x:abs(x-TARGET_PIXELS))
best_ratio  = results[best_pixels]
print best_pixels # e.g. 99750
print best_ratio  # e.g. 0.208
我知道有可能是一些错误在上面,即代码躺在身边有在结果字典中没有检查现有的密钥,但我更关心的是一种不同的方法,我想不出正在调查拉格朗日优化,但似乎相当复杂也是一个简单的问题.有任何想法吗?
**编辑后编辑**
如果有人对答案感兴趣,将提供代码 …
只是一个简单的问题,如果你说:
using namespace std;
map< int, vector< string > > map1;
或者甚至可能:
map< int, map< int, vector< string > > > map2;
只是为了让你得到正确的想法:
map< int, map< int, map< int, vector< string > > > > map3;
如果我这样做:
map1.clear();
map2.clear();
map3.clear();
它会清空地图及其嵌套地图、向量、列表等中的所有内容是否安全?
注意:我知道如果您使用指针,则需要手动遍历并删除,或者如果映射超出范围,也应该没问题,我只对在范围内和堆栈上的这种情况特别感兴趣。
当使用caffe运行make runtest时,我得到以下输出,它都可以很好地编译Cudnn没有提供错误,我还为运行Cuda的NVidia Tesla GPU提供了build_release/tools/caffe device_query -gpu <0,1>的输出驱动程序和运行时版本7.0.有人可以帮忙吗?
[----------] 1 test from SolverTest/0, where TypeParam = caffe::CPUDevice<float>
[ RUN      ] SolverTest/0.TestInitTrainTestNets
F0907 18:53:28.279698   309 cudnn_softmax_layer.cpp:19] Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0)  CUDNN_STATUS_ARCH_MISMATCH
*** Check failure stack trace: ***
    @     0x2b8a426cfdaa  (unknown)
    @     0x2b8a426cfce4  (unknown)
    @     0x2b8a426cf6e6  (unknown)
    @     0x2b8a426d2687  (unknown)
    @     0x2b8a4404b3c5  caffe::CuDNNSoftmaxLayer<>::LayerSetUp()
    @     0x2b8a440bf8a7  caffe::SoftmaxWithLossLayer<>::LayerSetUp()
    @     0x2b8a440eb9dd  caffe::Net<>::Init()
    @     0x2b8a440eca25  caffe::Net<>::Net()
    @     0x2b8a4410335a  caffe::Solver<>::InitTrainNet()
    @     0x2b8a44104354  caffe::Solver<>::Init()
    @     0x2b8a44104659  caffe::Solver<>::Solver()
    @           0x787e9c  caffe::SolverTest<>::InitSolverFromProtoString()
    @           0x785170  caffe::SolverTest_TestInitTrainTestNets_Test<>::TestBody()
    @           0x7e9943 …我在pugixml中加载文档时遇到了一些问题(请参阅http://pastebin.com/FE3nDX9h链接).
我收到的错误代码为16:No document element found表示XML文件无效或为空,我认为不是.
我正在使用默认的解析方法.有什么我想念的吗?
编辑:根据要求提供一些源代码http://pastebin.com/USUjLC4q您将需要编辑路径.
我正在寻找一种优雅的解决方案来使用 pugixml(1.6 版)替换节点 pcdata。例如,遍历节点集并将子值更新为某物。
pugi::xpath_node_set nodes = document.select_nodes("//a");
for (auto it = nodes.begin(); it != nodes.end(); it++)
{
    std::cout << "before : " << it->node().child_value() << std::endl;
    // SOME REPLACE GOES HERE
    std::cout << "after  : " << it->node().child_value() << std::endl;
}
我已经使用了:
it->node().append_child(pugi::node_pcdata).set_value("foo");
但顾名思义,它只是附加数据,但我找不到以下方面的任何函数:
it->node().remove_child(pugi::node_pcdata);
另一个注意事项是节点上的属性很重要,应该保持不变。
谢谢你的帮助。
在最后一个示例中,将 savez 与 **kwds 一起使用,数组与关键字名称一起保存。
outfile = TemporaryFile()
np.savez(outfile, x=x, y=y)
outfile.seek(0)
npzfile = np.load(outfile)
npzfile.files
['y', 'x']
npzfile['x']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
我将如何使用变量的实际值,例如:
x_name = 'foo'
y_name = 'bar'
np.savez(outfile, x_name=x, y_name=y)
然后
npzfile.files
['foo', 'bar']