可能重复:
Python Slice表示法的好入门
我最近一直在阅读一些示例代码并且我已经阅读了不少网站,但我似乎无法正确查询我给出的答案我正在寻找.如果有人能帮助我,我会很感激.
我有一个关于如何使用python/h5py最好地写入hdf5文件的问题.
我有以下数据:
-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178 | 10 | 12 | ...
-----------------------------------------
| 179 | 12 | 11 | ...
-----------------------------------------
| 185 | 9 | 12 | ...
-----------------------------------------
| 187 | 15 | 12 | ...
...
Run Code Online (Sandbox Code Playgroud)
大约10 ^ 4列,大约10 ^ 7行.(大约10 ^ 11(1000亿)个元素,或者~100GB,1个字节的整数).
使用这些数据,典型的使用几乎是一次写入,多次读取,典型的读取案例是获取第1列和另一列(比如254),将两列加载到内存中,并做一些奇特的统计.
我认为一个好的hdf5结构将使上表中的每列都是hdf5组,从而产生10 ^ 4组.这样我们就不需要将所有数据都读入内存了,是吗?hdf5结构虽然尚未定义,但它可以是任何东西.
现在的问题是:我一次收到~10 ^ 4行的数据(并且每次都没有完全相同的行数),需要将其逐步写入hdf5文件.我该怎么写这个文件?
我正在考虑python和h5py,但如果推荐的话可以使用其他工具.正在进行分组,例如
dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))
Run Code Online (Sandbox Code Playgroud)
然后当另一个10 ^ 4行的块到达时,替换数据集?
或者将每个10 ^ 4行的块存储为单独的数据集更好?或者我真的需要知道最后的行数吗?(这很难获得,但也许可能).
我可以保释hdf5,如果它也不是适合这项工作的工具,不过我认为一旦尴尬的写作完成,它就会很精彩.
我不明白这.我在人们的代码中看到了这一点.但无法弄清楚它的作用.这是在Python中.
str(int(a[::-1]))
Run Code Online (Sandbox Code Playgroud) 更新:
在python中,如何根据索引范围将列表拆分为子列表
例如原始清单:
list1 = [x,y,z,a,b,c,d,e,f,g]
Run Code Online (Sandbox Code Playgroud)
使用索引范围0 - 4:
list1a = [x,y,z,a,b]
Run Code Online (Sandbox Code Playgroud)
使用索引范围5-9:
list1b = [c,d,e,f,g]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我已经知道包含某些字符串的列表元素的(变量)索引,并希望根据这些索引值拆分列表.
还需要拆分成可变数量的子列表!即:
list1a
list1b
.
.
list1[x]
Run Code Online (Sandbox Code Playgroud) 是否有一个干净/简单的方法从右到右从右侧解压缩Python元组?
例如
j = 1,2,3,4,5,6,7
(1,2,3,4,5,6,7)
v,b,n = j[4:7]
Run Code Online (Sandbox Code Playgroud)
我可以修改切片表示法v = j[6], b=j[5], n=j[4]吗?
我意识到我可以命令左侧获得所需的元素,但可能存在我只想从左到右解包元组的情况.
我有两个从PIL图像转换的Numpy数组(3维uint8).
我想查找第一个图像是否包含第二个图像,如果是,请找出匹配所在的第一个图像内左上角像素的坐标.
有没有办法在Numpy中以足够快的方式完成这个,而不是使用(4!非常慢)纯Python循环?
2D示例:
a = numpy.array([
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]
])
b = numpy.array([
[2, 3],
[6, 7]
])
Run Code Online (Sandbox Code Playgroud)
怎么做这样的事情?
position = a.find(b)
Run Code Online (Sandbox Code Playgroud)
position那会是(0, 2).
我正在尝试用另一种语言(php)重新实现python 切片表示法,并寻找一个模仿python逻辑的片段(任何语言或伪代码).也就是说,给定列表及其三个(start, stop, step)或一部分,确定所有参数的正确值或默认值,并将切片作为新列表返回.
我试着查看来源.该代码远远超出我的技能,但我不禁同意评论说:
/* this is harder to get right than you might think */
Run Code Online (Sandbox Code Playgroud)
此外,如果这样的事情已经完成,指针将非常感激.
这是我的测试平台(确保您的代码在发布前通过):
#place your code below
code = """
def mySlice(L, start=None, stop=None, step=None):
or
<?php function mySlice($L, $start=NULL, $stop=NULL, $step=NULL) ...
or
function mySlice(L, start, stop, step) ...
"""
import itertools
L = [0,1,2,3,4,5,6,7,8,9]
if code.strip().startswith('<?php'):
mode = 'php'
if code.strip().startswith('def'):
mode = 'python'
if code.strip().startswith('function'):
mode = 'js'
if mode == 'php':
var, none = '$L', …Run Code Online (Sandbox Code Playgroud) 我正在使用python3.3.我想获得一个slice对象并使用它来创建一个新range对象.
它是这样的:
>>> class A:
def __getitem__(self, item):
if isinstance(item, slice):
return list(range(item.start, item.stop, item.step))
>>> a = A()
>>> a[1:5:2] # works fine
[1, 3]
>>> a[1:5] # won't work :(
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
a[1:5] # won't work :(
File "<pyshell#9>", line 4, in __getitem__
return list(range(item.start, item.stop, item.step))
TypeError: 'NoneType' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
嗯,这个问题很明显 - range不接受None作为一个值:
>>> range(1, 5, …Run Code Online (Sandbox Code Playgroud) python中的扩展切片语法已经向我解释为" a[n:m:k] returns every kth element from n to m".
这让我很清楚当k为正时会发生什么.但是我对如何解释a[n:m:k]负面k 感到迷茫.我知道这会a[::-1]颠倒一个,并且这a[::-k]需要反转a的第k个元素.
但这是对k正定义的概括呢?我想知道a[n:m:k]实际上是如何定义的,所以(例如)我可以理解为什么:
"abcd"[-1:0:-1] = "dcb"
Run Code Online (Sandbox Code Playgroud)
是否正在a[n:m:-k]逆转序列a,然后从m开始,在m之前从一个原始索引开始,然后结束一个?我不这么认为,因为这种模式不适合我尝试过的其他n和m值.但我无法弄清楚这是如何实际定义的,搜索让我无处可去.
假设我有一个列表[2, 4, 1, 3, 5]。
我想将列表从索引 1 排序到末尾,这给了我 [2, 1, 3, 4, 5]
我怎么能用python3做到这一点?
(没有额外的空间将不胜感激)
编辑:
我已将切片声明为已接受的答案。Python 仅复制对象引用,因此与真正的就地排序相比,速度损失不会那么大。但是如果你需要一个非常严格的解决方案,你可以参考@Heap Overflow 上我最喜欢的答案之一
>>> tmp = l[0]
>>> l[0] = float('-inf')
>>> l.sort()
>>> l[0] = tmp
>>> l
[2, 1, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)