我有两个 Javascript ArrayBuffers;每个包含 512 位数据。我想对两个数组进行异或比较并将结果存储在第三个数组中。
目前,我正在遍历缓冲区中的元素。在下面的代码中,“距离”是一个整数,feat_a1
并且feat_b1
是长度为 512 位的 ArrayBuffer。
for(var d1=0; d1<512; d1++){
distance += feat_b1[d1] ^ feat_a1[d1];
}
有没有更有效的方法对这两个数组进行成对比较?
我有两个 Javascript ArrayBuffers;每个包含 512 位数据。我想对两个数组进行异或比较并将结果存储在第三个数组中。
目前,我正在遍历缓冲区中的元素。在下面的代码中,“距离”是一个整数,feat_a1
并且feat_b1
是长度为 512 位的 ArrayBuffer。
for(var d1=0; d1<512; d1++){
distance += feat_b1[d1] ^ feat_a1[d1];
}
有没有更有效的方法对这两个数组进行成对比较?
据我了解,您不能直接使用 arrayBuffer[i],您必须将其传递给某个容器(如 Int8Array)。我制作了下一个示例http://jsfiddle.net/mLurz/ ,尝试使用此列表中的不同类型数组,Uint32Array 显示出最佳性能
var i;
var dist = 0;
var max = Math.pow(2,32);
var buf1 = new ArrayBuffer(1024);
var x = new Uint32Array(buf1);
for (i = 0; i < 256; ++i) {
x[i] = Math.random()*max;
}
var buf2 = new ArrayBuffer(1024);
var y = new Uint32Array(buf2);
for (i = 0; i < 256; ++i) {
y[i] = Math.random()*max
}
console.time('Uint32Array');
for (var j = 0; j < 1000000; ++j) {
for (i = 0; i < 256; ++i) {
dist += y[i]^x[i];
}
}
console.timeEnd('Uint32Array');