标签: sparse-array

稀疏八叉树的高效存储?

任何人都可以建议一种快速,有效的存储和访问稀疏八叉树的方法吗?

优选地,可以在HLSL中容易地实现.(我正在使用光线投射/体素应用)

在这种情况下,树可以预先计算,所以我主要关心的是大小和搜索时间.

更新

对于任何想要这样做的人来说,更有效的解决方案可能是将节点存储为使用Z阶曲线/ Morton树生成的线性八叉树.这样做可以消除内部节点的存储,但可能需要使用第二个"数据纹理"交叉引用线性树阵列,其中包含有关单个体素的信息.

c# xna sparse-array hlsl octree

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

使用SIMD(AVX2)进行稀疏阵列压缩

我有一个稀疏数组a(大多数为零):

unsigned char a[1000000]; 
Run Code Online (Sandbox Code Playgroud)

我想ba使用AVX2的Intel x64架构上使用SIMD指令的非零元素创建一个索引数组.我正在寻找有效如何做到的提示.具体来说,是否有SIMD指令来获取SIMD寄存器中连续非零元素的位置,是否连续排列?

c++ optimization simd sparse-array avx2

6
推荐指数
2
解决办法
1407
查看次数

SparseArray remove()和delete()有什么区别?

在SparseArray上调用remove()或delete()之间的主要区别是什么,因为它们都接受key作为参数.谢谢.

android sparse-array

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

获取稀疏JavaScript数组的第一个元素

我在javascript中有一个对象数组.我用jquery.

我如何获得数组中的第一个元素?我不能使用数组索引 - 因为我在将对象添加到数组时分配每个元素索引.因此索引不是0,1,2等.

只需要获取数组的第一个元素?

javascript arrays jquery sparse-array

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

将使用-v7.3(HDF5)保存的Matlab稀疏矩阵加载到Python中并对其进行操作

我是python的新手,来自matlab.我有一个以matlab v7.3(HDF5)格式保存的大型稀疏矩阵.到目前为止,我已经找到了两种加载文件的方法,使用h5pytables.然而,在矩阵上运行似乎非常缓慢.例如,在matlab中:

>> whos     
  Name           Size                   Bytes  Class     Attributes

  M      11337x133338            77124408  double    sparse    

>> tic, sum(M(:)); toc
Elapsed time is 0.086233 seconds.
Run Code Online (Sandbox Code Playgroud)

使用表格:

t = time.time()
sum(f.root.M.data)
elapsed = time.time() - t
print elapsed
35.929461956
Run Code Online (Sandbox Code Playgroud)

使用h5py:

t = time.time()
sum(f["M"]["data"])
elapsed = time.time() - t
print elapsed
Run Code Online (Sandbox Code Playgroud)

(我放弃了等待......)

[编辑]

根据@bpgergo的评论,我应该补充说我已经尝试通过以下两种方式将by h5py(f)中加载的结果转换为numpy数组或scipy稀疏数组:

from scipy import sparse
A = sparse.csc_matrix((f["M"]["data"], f["M"]["ir"], f["tfidf"]["jc"]))
Run Code Online (Sandbox Code Playgroud)

要么

data = numpy.asarray(f["M"]["data"])
ir = numpy.asarray(f["M"]["ir"])
jc …
Run Code Online (Sandbox Code Playgroud)

python matlab sparse-array hdf5 sparse-matrix

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

如何将sparsearray存储在bundle中

我有一个SparseArray<myObject>并希望将它存储onSaveInstanceState在我的活动中的方法包中并将其恢复oncreate.我找到putSparseParcelableArray了将SparseArray放入bundle中的onSaveInstanceState方法,并在方法中执行了此操作:

bundle.putSparseParcelableArray("mySparseArray", mySparseArray);
Run Code Online (Sandbox Code Playgroud)

但是eclips显示了这个错误:

The method putSparseParcelableArray(String, SparseArray<? extends Parcelable>) in the type Bundle is not applicable for the arguments (String, SparseArray<myObject>)
Run Code Online (Sandbox Code Playgroud)

快速解决方法是将参数转换mySparsArraySparseArray<? extends Parcelable>,但如果我这样做并在onCreate方法中获取它:

mySparseArray = (SparseArray<myObject>) savedInstanceState.getSparseParcelableArray("mySparseArray");
Run Code Online (Sandbox Code Playgroud)

它收到此错误:

Cannot cast from SparseArray<Parcelable> to SparseArray<myObject>
Run Code Online (Sandbox Code Playgroud)

如果这种方式出错了,将mySparseArray放入bundle中的解决方案是什么?任何帮助将非常感激.

android bundle sparse-array android-activity

5
推荐指数
2
解决办法
8989
查看次数

Pandas稀疏数据帧在磁盘上比密集版本更大

我发现数据帧的稀疏版本在保存到磁盘时实际上比密集版本大得多.我究竟做错了什么?

test = pd.DataFrame(ones((4,4000)))
test.ix[:,:] = nan
test.ix[0,0] = 47

test.to_hdf('test3', 'df')
test.to_sparse(fill_value=nan).to_hdf('test4', 'df')

test.to_pickle('test5')
test.to_sparse(fill_value=nan).to_pickle('test6')

....
ls -sh test*
200K test3   16M test4  164K test5  516K test6
Run Code Online (Sandbox Code Playgroud)

使用版本0.12.0

我最终希望有效地存储10 ^ 7个60个阵列,密度大约为10%,然后将它们拉入Pandas数据帧并使用它们.


编辑:感谢Jeff回答原始问题.后续问题:这似乎只能节省酸洗费用,而不是使用其他格式如HDF5.酸洗我最好的路线?

print shape(array_activity) #This is just 0s and 1s
(1020000, 60)

test = pd.DataFrame(array_activity)
test_sparse = test.to_sparse()
print test_sparse.density
0.0832333496732

test.to_hdf('1', 'df')
test_sparse.to_hdf('2', 'df')
test.to_pickle('3')
test_sparse.to_pickle('4')
!ls -sh 1 2 3 4
477M 1  544M 2  477M 3   83M 4
Run Code Online (Sandbox Code Playgroud)

这是一个数据,作为Matlab .mat文件中的索引列表,小于12M.我很想把它变成HDF5/Pytables格式,这样我就可以抓住特定的索引(其他文件要大得多,加载到内存中需要更长的时间),然后随便做一些Pandasy的事情.也许我不会以正确的方式解决这个问题?

python sparse-array sparse-matrix pandas

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

如何使用SparseArray作为Adapter的源?

我有一个稀疏的值数组,我想在Spinner中填充,当选择该项时,我想获取id(这是稀疏数组中的键).

从SparseArray创建适配器的首选方法是什么?

是否可以将现有的适配器(如BaseAdapter或ListAdapter)子类化,以便项目具有SparseArray中的项目ID作为项目ID?

不知道如何实现上述目标,我正在考虑创建一个简单的ArrayAdapter实例,并将其作为源从SparseArray中提供,并在选择项目时,通过值查找键,我认为不会高效.

android sparse-array android-listview android-adapter android-spinner

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

Android 中的 HashMap、SparseArray:多线程问题?

我知道 HashMap 和 SparseArray 都不是线程安全的。如果我有一个中央数据存储库作为 HashMap 可以被活动访问,并且可能被 AsyncTask 访问,我是否必须担心?

为了安全起见,建议使用 HashTable 或更好的 ConcurrentHashMap 吗?

multithreading android hashmap sparse-array concurrenthashmap

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

Node.js中稀疏数组的内存消耗

我写了一个小程序,生成数组,运行时间很长(几乎永远;-)):

var results = [];
var i = 1;

while (true) {
  console.log(i++);
  results.push([]);
}
Run Code Online (Sandbox Code Playgroud)

当我创建一个长度稀疏的数组而不是空数组时,i程序崩溃得非常快:

var results = [];
var i = 1;

while (true) {
  console.log(i);
  results.push(new Array(i++));
}
Run Code Online (Sandbox Code Playgroud)

实际上我起床i等于17424,然后我收到一条错误消息告诉我

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

和Node.js带我回到控制台.由于唯一的区别是第二个产生比前一个更大的"空"数组,这意味着一个空的稀疏长度数组n占用了n具有长度的空数组的空间1.

我是对的(特别是Node.js)吗?

还有一个问题:如果我跑了

var results = [];
var i = 1;

while (true) {
  console.log(i);
  var temp = [];
  temp[i++] = i;
  results.push(temp);
}
Run Code Online (Sandbox Code Playgroud)

然后我起床到1286175,然后再次崩溃: …

javascript arrays sparse-array memory-consumption node.js

5
推荐指数
2
解决办法
1083
查看次数