小编dgm*_*p88的帖子

不规则形状比较

我正在尝试为一些行为心理学研究提出一个评分系统.

我要求人们在图形输入板上画一封信然后追踪它.我想评估这种痕迹的准确性.所以,你绘制任何字母('a'),然后你再做一次,然后我根据它与你第一次绘画时的相似程度得分.附图存储为像素位置.

准确度被评估为与原始信件的接近程度.该方法不需要允许缩放,旋转或位置改变.从概念上讲,它就像两条线之间的区域,只有线条高度不规则,所以积分(据我所知)不会起作用.

我在MATLAB写作,但任何概念上的帮助将不胜感激.我已经尝试将绘制的所有像素之间的最小距离求和,但这给出了良好放置的单点的好(低)分数.

这一定是以前做过的,但我的搜索没有运气.任何帮助非常感谢!

---部分解决方案使用@Bill建议的方法.不起作用,因为bwdist渐变太陡峭.而不是Bill显示的漂亮的第二张图片,它看起来更像是原版.

%% Letter to image 
im = zeros(1080,1920,3); % The screen (possible pixel locations) 
% A small square a bit like the letter 'a', a couple of pixels wide. 
pixthick = 5; 
im(450:450+pixthick,[900:1100],:) = 1; 
im(550:550+pixthick,[900:1100],:) = 1; 
im([450:550],900:900+pixthick,:) = 1; 
im([450:570],1100:1100+pixthick,:) = 1;
subplot(2,1,1); imagesc(im); %% atransbw = bwdist(im(:,:,1)<0.5); subplot(2,1,2); 
imagesc(atransbw);
Run Code Online (Sandbox Code Playgroud)

matlab image-comparison edge

5
推荐指数
0
解决办法
1681
查看次数

MATLAB搜索字符串子集的单元格数组

我试图找到MATLAB中单元格数组中出现子字符串的位置.下面的代码有效,但相当丑陋.在我看来应该有一个更容易的解决方案.

cellArray = [{'these'} 'are' 'some' 'nicewords' 'and' 'some' 'morewords'];
wordPlaces = cellfun(@length,strfind(cellArray,'words'));
wordPlaces = find(wordPlaces); % Word places is the locations.
cellArray(wordPlaces);
Run Code Online (Sandbox Code Playgroud)

这是类似的,但不一样的这个这个.

string matlab cell

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

按顺序将值插入到sqlite数据库中

我在 SQLITE 中有一个高分表,它支持三个简单的操作:

  1. 添加新用户以及他们的高分。
  2. 更新现有用户的高分。
  3. 获取排行榜(所有用户和分数按分数排序):
    SELECT * FROM scores ORDER BY high_score DESC

一切正常,但我担心这是如何扩展的:10,000 名用户对高分进行排序需要大约 60 毫秒,这是可以的,但是这个时间大致呈线性上升,因此如果我有 100,000 名用户请求高分将需要大约 600 毫秒,这是太慢了。

有没有一种聪明的方法来插入新用户/更新他们的分数,以避免每次检索排行榜时都必须进行完整排序?例如像 C++ priority_queue 或 python heapq 之类的东西。

我想我可以在每次插入时对整个数据库进行排序和替换(例如对整个 SQLite 表进行排序),但这似乎有点矫枉过正。

database sqlite sorting

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

numpy中的快速高级索引

我正试图使用​​花哨的索引尽快从大型numpy数组中获取切片.我很乐意返回一个视图,但高级索引会返回一个副本.

到目前为止,我已经尝试过来自这里这里的解决方案.

玩具数据:

data = np.random.randn(int(1e6), 50)
keep = np.random.rand(len(data))>0.5
Run Code Online (Sandbox Code Playgroud)

使用默认方法:

%timeit data[keep] 
10 loops, best of 3: 86.5 ms per loop
Run Code Online (Sandbox Code Playgroud)

Numpy采取:

%timeit data.take(np.where(keep)[0], axis=0)
%timeit np.take(data, np.where(keep)[0], axis=0)
10 loops, best of 3: 83.1 ms per loop
10 loops, best of 3: 80.4 ms per loop    
Run Code Online (Sandbox Code Playgroud)

方法从这里:

rows = np.where(keep)[0]
cols = np.arange(a.shape[1])
%timeit (a.ravel()[(cols + (rows * a.shape[1]).reshape((-1,1))).ravel()]).reshape(rows.size, cols.size)
10 loops, best of 3: 159 ms per loop
Run Code Online (Sandbox Code Playgroud)

如果您正在观看相同大小的视图: …

python arrays indexing optimization numpy

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