此处将为大家介绍关于python中的稀疏分配列表的详细内容,并且为您解答有关python生成稀疏矩阵的相关问题,此外,我们还将为您介绍关于cjson中的稀疏数组encode、CSV到Python中的稀
此处将为大家介绍关于python中的稀疏分配列表的详细内容,并且为您解答有关python生成稀疏矩阵的相关问题,此外,我们还将为您介绍关于cjson中的稀疏数组encode、CSV到Python中的稀疏矩阵、python - 如何使列表仅包含Python中的不同元素?、python - 如何使用列表中的键和Python中的空值初始化dict?的有用信息。
本文目录一览:- python中的稀疏分配列表(python生成稀疏矩阵)
- cjson中的稀疏数组encode
- CSV到Python中的稀疏矩阵
- python - 如何使列表仅包含Python中的不同元素?
- python - 如何使用列表中的键和Python中的空值初始化dict?
python中的稀疏分配列表(python生成稀疏矩阵)
我需要具有以下行为的列表
>>> l = SparseList()>>> l[]>>> l[2] = "hello">>> l[ None, None, "hello"]>>> l[5]None>>> l[4] = 22>>> l[ None, None, "hello", None, 22]>>> len(l)5>>> for i in l: print iNoneNone"hello"None22
尽管它可以通过字典“模拟”,但并不完全相同。numpy数组可以以这种方式运行,但是我不想为这样的事情导入整个numpy。在自己编写代码之前,请问标准库中是否存在类似的内容。
答案1
小编典典以下是传递给定示例的最少代码(进行必要的调整:您期望使用怪异的空格和引号,在没有print
声明的情况下在提示符下显示“无”等):
class SparseList(list): def __setitem__(self, index, value): missing = index - len(self) + 1 if missing > 0: self.extend([None] * missing) list.__setitem__(self, index, value) def __getitem__(self, index): try: return list.__getitem__(self, index) except IndexError: return None__test__ = dict(allem=''''''>>> l = SparseList()>>> l[]>>> l[2] = "hello">>> l[None, None, ''hello'']>>> print l[5]None>>> l[4] = 22>>> l[None, None, ''hello'', None, 22]>>> len(l)5>>> for i in l: print iNoneNonehelloNone22'''''')import doctestdoctest.testmod(verbose=1)
我想您会想要更多(支持负索引,切片等),但这是您所有示例的隐式指定。
cjson中的稀疏数组encode
lua中的cjson扩展一直是比较好用的json处理扩展,但是在处理数字索引时对于索引下标不连续的悉数数组确有一些特殊的处理方式。
在默认情况下只要不连续的数量少于10就会被null填补上,但最大索引大于10或最大索引大于数组数量一倍时就会抛出“Cannot serialise table: excessively sparse array”。
这是由于cjson处理稀疏数组时有一个安全处理的条件具体可以查看lua-cjson的文档3.11
通过cjson.encode_sparse_array()可以查看到当前的对应配置值
例如,默认情况下:
print(cjson.encode_sparse_array())
输出:
false 2 10
这里返回的三个参数分别表示为:极度稀疏数组(excessively sparse array)是否转为字符串索引,最大索引号与元素数量的安全比例,超出安全比例时最大索引值上限。
了解了这些后就可以按需要来设置相关值,比如允许字符串索引时:
cjson.encode_sparse_array(true) print(cjson.encode({[1000]="data"}))
将输出:
{"1000":"data"}
而如果将比例设为0:
cjson.encode_sparse_array(false,0) print(cjson.encode({[11]="data"}))
将输出:[null,null,"data"]
正确的设置参数后将避免excessively sparse array异常出现的问题
CSV到Python中的稀疏矩阵
我有一个很大的csv文件,其中列出了图中节点之间的连接。例:
0001,95784
0001,98743
0002,00082
0002,00091
因此,这意味着节点id
0001连接到节点95784和98743,依此类推。我需要将其读入numpy中的稀疏矩阵。我怎样才能做到这一点?我是python的新手,所以有关此的教程也将有所帮助。
答案1
小编典典使用scipy的lil_matrix(列表矩阵列表)的示例。
基于行的链表列表。
它包含一个
self.rows
行列表(),每个行都是一个非零元素列索引的排序列表。它还包含self.data
这些元素的列表()。
$ cat 1938894-simplified.csv0,321,211,231,322,232,532,823,824,465,757,868,28
码:
#!/usr/bin/env pythonimport csvfrom scipy import sparserows, columns = 10, 100matrix = sparse.lil_matrix( (rows, columns) )csvreader = csv.reader(open(''1938894-simplified.csv''))for line in csvreader: row, column = map(int, line) matrix.data[row].append(column)print matrix.data
输出:
[[32] [21, 23, 32] [23, 53, 82] [82] [46] [75] [] [86] [28] []]
python - 如何使列表仅包含Python中的不同元素?
我在 Python 中有一个列表,我怎样才能使它的值独一无二?
python - 如何使用列表中的键和Python中的空值初始化dict?
我想从中得到:
keys = [1,2,3]
对此:
{1: None,2: None,3: None}
有没有一种pythonic的方法?
这是一种丑陋的做法:
>>> keys = [1,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys,[None]*len(keys)))
{1: None,3: None}
今天关于python中的稀疏分配列表和python生成稀疏矩阵的分享就到这里,希望大家有所收获,若想了解更多关于cjson中的稀疏数组encode、CSV到Python中的稀疏矩阵、python - 如何使列表仅包含Python中的不同元素?、python - 如何使用列表中的键和Python中的空值初始化dict?等相关知识,可以在本站进行查询。
本文标签: