【问题标题】:javascript multidimensional Typed array (Int8Array) examplejavascript 多维类型化数组 (Int8Array) 示例
【发布时间】:2016-11-17 18:58:45
【问题描述】:

我尝试使用类型化数组而不是数组来减少内存:

function createarrayInt8(numrows,numcols,number){
       
	var arr = new Int8Array(numrows);
         
	for (var i = 0; i < numrows; ++i){
		var columns = new Int8Array(numcols);
		for (var j = 0; j < numcols; ++j){
			columns[j] = number;
		}
		arr[i] = columns;
	}
  
	return arr; 
}

但我不能创建多维类型数组。 为什么? 我只需要将“数字”变量转换为 Int8 吗?

【问题讨论】:

  • 嗯,类型化数组只能存储其类型的值。因此,一个 uint8 数组只能存储无符号 8 位整数,但不能存储(uints)数组。
  • 我几乎是这么想的 :)。但是如何得到一个只存储无符号8位整数的多维数组来减少使用的内存呢?

标签: javascript multidimensional-array typed-arrays typedarray


【解决方案1】:

键入的Int8Array 只能保存 8 位整数。所以arr[i] = columns 将不起作用,因为列的类型为Int8Array,它不能转换为(以任何有意义的方式)存储为一个 8 位整数。

解决方案:要么将 arr 设为通用 Array,其元素可以是数组,要么 - 可能是更高级但通常更高效的解决方案 - 将多维数组存储为大小为 numrows * numcols 的单个平面数组并访问元素通过arr[column + row * numcols]:

var numrows = 5, numcols = 4;
var arr = new Int8Array(numrows * numcols).fill(0);

arr[3 + 1 * numrows] = 1; // col = 3, row = 1

console.log (arr);

【讨论】:

  • 我可以解释这个 read 操作将 numcols 与行相乘(即 arr[column + row * numcols])而 write 操作将 numrows 与行相乘(即 arr[column + row * numrows] )?这对我来说似乎是错误的,因为读/写公式不一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2017-05-24
相关资源
最近更新 更多