如何在JavaScript中创建向量嵌入的Blob表示以用于Redis向量相似度搜索
如何在JavaScript中生成与NumPy float32数组等价的Blob字节表示?
现有向量嵌入如[1,2,3,4],通过Python的NumPy库可执行如下代码生成其float32格式的Blob字节表示:
np.array([1,2,3,4]).astype(dtype=np.float32).tobytes()
输出的转义字节字符串为:
\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@
在JavaScript中可以通过以下方式实现相同效果:
生成等价的转义字节字符串
利用Float32Array处理浮点数组,转换为Uint8Array提取原始字节后,拼接成Python风格的转义字符串:
const vector = [1, 2, 3, 4]; // 创建float32类型数组(默认小端字节序,与NumPy默认行为一致) const float32Arr = new Float32Array(vector); // 提取原始字节序列 const uint8Arr = new Uint8Array(float32Arr.buffer); // 转换为\x开头的转义格式字符串 const blobString = Array.from(uint8Arr) .map(byte => `\\x${byte.toString(16).padStart(2, '0')}`) .join(''); console.log(blobString); // 输出与Python一致的转义字节串
生成Blob对象(若需实际Blob实例)
如果需要直接生成Blob对象而非字符串表示,可基于Float32Array直接创建:
const vector = [1, 2, 3, 4]; const float32Arr = new Float32Array(vector); const blob = new Blob([float32Arr], { type: 'application/octet-stream' });
内容的提问来源于stack exchange,提问作者Jonathan Doe
相关产品推荐
相关产品推荐

