我正在尝试加载我之前保存的稀疏数组.保存稀疏数组很容易.试图阅读它是一种痛苦.scipy.load在我的稀疏数组周围返回一个0d数组.
import scipy as sp
A = sp.load("my_array"); A
array(<325729x325729 sparse matrix of type '<type 'numpy.int8'>'
with 1497134 stored elements in Compressed Sparse Row format>, dtype=object)
Run Code Online (Sandbox Code Playgroud)
为了获得稀疏矩阵,我必须展平0d数组,或者使用sp.asarray(A).这似乎是一种非常难以做到的事情.Scipy是否足够聪明才能理解它已经加载了一个稀疏数组?有没有更好的方法来加载稀疏数组?
(关于时间有效的稀疏数组有一些问题,但我正在寻找内存效率.)
我需要相当于一个List<T>或Map<Integer,T>哪个
ArrayList<T>在大多数索引不是的情况下null,即在实际数据不是非常稀疏的情况下,就像存储器效率一样.null指数数量成比例的空间.HashMap<Integer,T>(因为这会自动锁定密钥并且可能不会利用标量密钥类型).有谁知道这样的实用类?
我本来期望Commons Collections有一个,但它似乎没有.
我遇到的org.apache.commons.math.util.OpenIntToFieldHashMap看起来几乎是正确的,除了价值类型FieldElement似乎是无偿的; 我只想要T extends Object.它看起来很容易编辑它的源代码更通用,但我宁愿使用二进制依赖,如果有一个可用.
为什么Julia中没有任何多维稀疏矩阵/数组?为什么我们只能有2D稀疏矩阵而不是3D稀疏矩阵(或数组)呢?
我使用一个唯一的int id列表作为快速查找表的用户名列表,并决定使用sparseArray但我希望能够打印以不时记录整个列表以进行调试.
SparseArray不可迭代,与util.Map接口不太相似
假设我有两个非常大的列表{a1,a2,...}和{b1,b2,...},其中所有ai和bj都是大型稀疏数组.为了提高内存效率,我将每个列表存储为一个全面的稀疏数组.
现在我想在所有可能的ai和bj对上计算一些函数f,其中每个结果f [ai,bj]再次是稀疏数组.顺便提一下,所有这些稀疏阵列都具有相同的尺寸.
而
Flatten[Outer[f, {a1, a2, ...}, {b1, b2, ...}, 1], 1]
Run Code Online (Sandbox Code Playgroud)
返回所需的结果(原则上)它似乎消耗了过多的内存.并非最不重要,因为返回值是稀疏数组的列表,而一个全面的稀疏数组在我感兴趣的情况下效率更高.
是否有上述用途的有效替代方案Outer?
更具体的例子:
{SparseArray[{{1, 1, 1, 1} -> 1, {2, 2, 2, 2} -> 1}],
SparseArray[{{1, 1, 1, 2} -> 1, {2, 2, 2, 1} -> 1}],
SparseArray[{{1, 1, 2, 1} -> 1, {2, 2, 1, 2} -> 1}],
SparseArray[{{1, 1, 2, 2} -> -1, {2, 2, 1, 1} -> 1}],
SparseArray[{{1, 2, 1, 1} -> 1, {2, 1, 2, 2} -> 1}],
SparseArray[{{1, 2, …Run Code Online (Sandbox Code Playgroud) 如何初始化一个static不可修改的实例android.util.SparseArray?
例如,
A = [ -1 0 -2 0 0
2 8 0 1 0
0 0 3 0 -2
0 -3 2 0 0
1 2 0 0 -4];
Run Code Online (Sandbox Code Playgroud)
如何获得每行的第一个非零元素的向量?
我有一个稀疏数组,其内容不保证以索引顺序插入,但需要按索引顺序迭代.要遍历稀疏数组,我了解您需要使用for..in语句.
但是,根据这篇文章:
无法保证for ... in将以任何特定顺序返回索引
但是像这样的stackoverflow问题表明虽然对象属性订单不能保证,但是数组顺序是:
在JavaScript中不保证对象中的属性顺序,您需要使用数组.
我在Chrome,Firefox和IE的最新版本中对此进行了测试.
<ol id="items"></ol>
Run Code Online (Sandbox Code Playgroud)
var list = [];
function addItem(index) {
list[index] = { idx : index };
}
var insertOrder = [ 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 ];
for ( var i = 0; i < 15; i++ ) {
addItem(insertOrder[i]);
}
for(var item in list) {
$("#items").append("<li>" + list[item].idx + "</li>");
}
Run Code Online (Sandbox Code Playgroud)
所有人似乎都遵守索引顺序,所以我可以相信这总是如此吗?否则,我如何以索引顺序最好地获取它们?
在 C++ 中表示稀疏张量的合适数据结构是什么?我想到的第一个选项是 a,boost::unordered_map因为它允许快速设置和检索 an 元素等操作,如下所示:
A(i,j,k,l) = 5
Run Code Online (Sandbox Code Playgroud)
但是,我还希望能够对单个索引进行收缩,这将涉及对其中一个索引进行求和
C(i,j,k,m) = A(i,j,k,l)*B(l,m)
Run Code Online (Sandbox Code Playgroud)
使用 来实现这个运算符有多容易boost::unordered_map?有没有更合适的数据结构?
似乎 numpy 的einsum函数不适用于scipy.sparse矩阵。有没有其他方法einsum可以做稀疏矩阵可以做的事情?
针对@eickenberg 的回答:我想要的特定 einsum 是numpy.einsum("ki,kj->ij",A,A)- 行的外积的总和。
sparse-array ×10
android ×2
java ×2
arrays ×1
c++ ×1
collections ×1
idioms ×1
javascript ×1
julia ×1
matlab ×1
matrix ×1
memory ×1
numpy ×1
outer-join ×1
python ×1
scipy ×1