我想矢量化以下MATLAB代码.我认为它必须简单,但我发现它令人困惑.
r = some constant less than m or n
[m,n] = size(C);
S = zeros(m-r,n-r);
for i=1:m-r+1
for j=1:n-r+1
S(i,j) = sum(diag(C(i:i+r-1,j:j+r-1)));
end
end
Run Code Online (Sandbox Code Playgroud)
的代码计算分数,的表小号,对于动态规划算法,从另一个得分表,Ç.
对角线求和是为所有可能的片段(大小为r)生成用于生成C的各个数据片段的分数.
提前感谢您的任何答案!对不起,如果这个显而易见......
注意
内置的conv2比convnfft更快,因为我的眼睛(r)非常小(5 <= r <= 20).convnfft.m表示r应该> 20表示任何利益.
假设我有一个(n X 1)个向量A的单元格数组,以及一个包含索引的向量的单元格数组A,被称为B.我希望提取一个单元格数组C,这样C{i} = [A{B{i}}].
换句话说,我有一个索引数组的单元格数组,我想拉出与A每个索引数组索引的向量级联相对应的矩阵.
for i = 1:length(B)
%# B{i} is an array of indices, C{i} is a matrix
C{i} = [ A{ B{i} } ];
end
Run Code Online (Sandbox Code Playgroud)
循环相当于:
C = cellfun(@(x)[A{x}],B,'UniformOutput',false); %# implicit for loop w/ closure
Run Code Online (Sandbox Code Playgroud)
我可以单独使用索引表达式吗?或者至少没有循环?
我想deal()可能必须参与,但无法弄明白.
我正在学习使用SIMD功能,通过使用矢量内在函数重写我的个人图像处理库.一个基本功能是一个简单的"数组+=",即
void arrayAdd(unsigned char* A, unsigned char* B, size_t n) {
for(size_t i=0; i < n; i++) { B[i] += A[i] };
}
Run Code Online (Sandbox Code Playgroud)
对于任意数组长度,明显的SIMD代码(假设由16对齐)类似于:
size_t i = 0;
__m128i xmm0, xmm1;
n16 = n - (n % 16);
for (; i < n16; i+=16) {
xmm0 = _mm_load_si128( (__m128i*) (A + i) );
xmm1 = _mm_load_si128( (__m128i*) (B + i) );
xmm1 = _mm_add_epi8( xmm0, xmm1 );
_mm_store_si128( (__m128i*) (B + i), xmm1 );
}
for (; i …Run Code Online (Sandbox Code Playgroud) 我正在尝试对大量字符串(蛋白质序列)执行一些基于组合的过滤.
我写了一组三个子程序来处理它,但我在两个方面遇到麻烦 - 一个是小的,一个是主要的.小麻烦是当我使用List :: MoreUtils'成对'时,我得到关于使用的警告,$a并且$b只有一次,并且它们未被初始化.但我相信我正在调用这种方法(基于CPAN的输入和网上的一些例子).
主要的麻烦是错误"Can't use string ("17/32") as HASH ref while "strict refs" in use..."
看起来这只有在foreach循环输入&comp将散列值作为字符串而不是评估除法运算时才会发生.我确定我犯了一个菜鸟错误,但无法在网上找到答案.我第一次看到perl代码是在上周三...
use List::Util;
use List::MoreUtils;
my @alphabet = (
'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I',
'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V'
);
my $gapchr = '-';
# Takes a sequence and returns letter => occurrence count pairs as hash.
sub getcounts {
my …Run Code Online (Sandbox Code Playgroud) 我希望计算矢量集之间的累积余弦距离.
一组向量的自然表示是一个矩阵......但是如何对以下内容进行向量化?
function d = cosdist(P1,P2)
ds = zeros(size(P1,2),1);
for k=1:size(P1,2)
%#used transpose() to avoid SO formatting on '
ds(k)=transpose(P1(:,k))*P2(:,k)/(norm(P1(:,k))*norm(P2(:,k)));
end
d = prod(ds);
end
Run Code Online (Sandbox Code Playgroud)
我当然可以写
fz = @(v1,v2) transpose(v1)*v2/(norm(v1)*norm(v2));
ds = cellfun(fz,P1,P2);
Run Code Online (Sandbox Code Playgroud)
...只要我将我的矩阵重铸为矢量的单元阵列.有更好/完全数字的方式吗?
此外,cellfun,arrayfun等会利用向量指令和/或多线程吗?
注意当前公司可能是多余的,但对于列向量而言v1'*v2 == dot(v1,v2),在Matlab中显着更快.
它必须简单,但令人惊讶的是我无法在这里或通过反复试验找到这个问题的答案.
我想从矩阵中获取值(根据某些条件)并将值放入向量中.我还需要匹配值的下标索引.有很多数据,所以循环出来了.
这是一个正确的(但是是迭代的)答案:
[I,J] = find(A > 5);
values = zeros(numel(I),1);
for i=1:numel(I)
values(i) = A(I(i),J(i));
end
Run Code Online (Sandbox Code Playgroud)
我试过values = A(I,J)但这是n-by-n而不是n-by-1.
我的应用程序具有与相册和单张照片具有相同逻辑关系的域类。使用 aList进行hasMany关联应该支持各个专辑内的向后和向前移动,而无需显式管理位置字段或上一个/下一个指针。
例如:
class Album {
static hasMany = [photos: Photo]
List photos // Generates column `album_idx` in table for Photo.
Integer size // Memoized.
}
class Photo {
static belongsTo = [album: Album]
static hasOne = [content: PhotoData] // PhotoData has byte[] field for data
}
class Controller {
def prev() {
def prevIdx = idx==0 ? album.size - 1 : idx -1 // etc.
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在没有本机 SQL 查询的情况下访问 的值吗_idx?
我已经尝试过photo.album.photos.indexOf(photo) …
MATLAB函数pdist计算一组点的成对距离.为了节省空间和时间,它省略了repeat(dist(A,B) == dist(B,A))和self(dist(A,A) == 0)比较.结果在带有索引的单个向量中返回[1 2 3 4 5 6 7 8 9 10].扩展到全距离矩阵(例如通过函数squareform),位置映射如下:
- - - - -
1 - - - - # "1" is subscript "1,2"
2 5 - - -
3 6 8 - - # "6" is subscript "4,2"
4 7 9 10 -
Run Code Online (Sandbox Code Playgroud)
给定一个向量,例如,pdist将索引转换为该向量的表达式到全距离矩阵的下标索引的表达式是什么?
例如,我希望在一组点中找到彼此距离最远的两个点:
d = pdist(points); %# points is M x 2 (or 3, etc.), d is described above
N …Run Code Online (Sandbox Code Playgroud)