在下面的示例中,我正在创建idxL,并且希望遍历其元素以执行其他操作。我试图理解为什么idxL[0][0]
返回[[ True False False False False]]
而不是仅返回True
。 idxL.item(0)
似乎有效。我想我可以使用它遍历idxL中的全部项目。但是,由于某种原因,我认为当我开始处理更大的数组时,效率可能不如
from scipy.sparse import csr_matrix
a=['foo','panda','donkey','bird','egg']
b='foo'
idxL=csr_matrix((1,5), dtype=bool)
idxTemp=np.array(list(map(lambda x: x in b, a)))
idxL = idxL + idxTemp
print(idxL[0][0])
print(idxL.item(0))
答案 0 :(得分:1)
In [193]: from scipy import sparse
In [194]: a=['foo','panda','donkey','bird','egg']
...: b='foo'
...: idxL=sparse.csr_matrix((1,5), dtype=bool)
...: idxTemp=np.array(list(map(lambda x: x in b, a)))
稀疏矩阵:
In [195]: idxL
Out[195]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 0 stored elements in Compressed Sparse Row format>
In [196]: idxL.A
Out[196]: array([[False, False, False, False, False]])
密集数组;请注意,这是1d
In [197]: idxTemp
Out[197]: array([ True, False, False, False, False])
索引稀疏矩阵:
In [198]: idxL[0,0]
Out[198]: False
加法-现在是密集矩阵:
In [199]: idxLL = idxL + idxTemp
In [200]: idxLL
Out[200]: matrix([[ True, False, False, False, False]])
In [201]: idxLL[0,0]
Out[201]: True
矩阵的 [0]
选择第一行,但结果仍为2d。 [0][0]
索引没有帮助。这种索引风格适用于2d ndarray
,但[0,0]
通常更好。
In [202]: idxLL[0]
Out[202]: matrix([[ True, False, False, False, False]])
In [203]: idxTemp[0]
Out[203]: True
我们可以直接从idxTemp
制作一个稀疏矩阵:
In [257]: M = sparse.csr_matrix(idxTemp)
In [258]: M
Out[258]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 1 stored elements in Compressed Sparse Row format>
In [259]: M.A
Out[259]: array([[ True, False, False, False, False]])
In [260]: print(M)
(0, 0) True
无需将其添加到idxL
。可以添加:
In [261]: idxL+M
Out[261]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 1 stored elements in Compressed Sparse Row format>
我不建议通过添加矩阵来构建备用矩阵。
答案 1 :(得分:0)
这是因为idxL不是np.array而是np.matrix。 要将其转换为numpy数组,请参考属性“ A”,该属性返回np.array。
public void Savefile (string path)
{
System.IO.FileStream FS = new
System.IO.FileStream("C:\\Users\\blablablayouknow", System.IO.FileMode.Create);
BinaryFormatter BF = new BinaryFormatter();
BF.Serialize(FS, NameofList);
FS.Dispose();
}
public NameofList Loadfile (string path)
{
Einträge ET = new Einträge();
System.IO.FileStream FS = new
System.IO.FileStream("C:\\Users\\blablablayouknowagain",
System.IO.FileMode.Open);
BinaryFormatter BF = new BinaryFormatter();
BF.Deserialize(FS);
return ET;
}
public BindingList<NameofClass> NameofList= new BindingList<NameofClass>();
[Serializable]
public class Einträge // Objekt Listeneinträge
{
public string Name { get; set; }
public string Telefonnummer { get; set; }
}
编辑:如果您想保持稀疏状态,则应将原始代码更改为
import numpy as np
from scipy.sparse import csr_matrix
a=['foo','panda','donkey','bird','egg']
b='foo'
idxL=csr_matrix((1,5), dtype=bool)
idxL.todense()
idxTemp=np.array(list(map(lambda x: x in b, a)))
idxL = idxL + idxTemp
print(idxL.A[0][0])
print(idxL.item(0))
output:
True
True
现在idxL仍然是csr_matrix,并支持[]索引。