用元组索引的Python列表
我在用Matlab,但现在需要用Python做一些事情。如果有人能帮我解答一下Python的语法问题,我会非常感激:
(1) 在Python中,列表可以用元组来索引吗?如果可以的话,我该怎么做呢?比如,我想用这个方法来表示一个数据矩阵。
(2) 假设我可以用元组来索引列表,比如说data[(row,col)],那么我该怎么删除整列呢?我知道在Matlab中,我可以这样做:
new_data = [data(:,1:x-1) data(:,x+1:end)];
如果我想从data中删除第x列。
(3) 我怎么能轻松地计算每一行中非负元素的数量?比如,在Matlab中,我可以这样做:
sum(data>=0,1)
这样可以给我一个列向量,表示每一行中非负元素的数量。
非常感谢!
8 个回答
8
你应该了解一下 numpy,它就是为这种情况而设计的。
2
我同意大家的看法,使用 Numpy/Scipy 是个好主意。不过,我来具体回答你的问题。
没错。索引可以是内置的列表,也可以是 Numpy 数组。假设你有
x = scipy.array([10, 11, 12, 13])
和y = scipy.array([0, 2])
。那么x[[0, 2]]
和x[y]
返回的结果是一样的。new_data = scipy.delete(data, x, axis=0)
(data>=0).sum(axis=1)
要小心:第二个例子展示了使用 Numpy/Scipy 时常见的一个陷阱。正如第三个例子所示,axis
属性通常设置为 0 是为了在数组的第一维上操作,设置为 1 是为了在第二维上操作,依此类推。但是像 delete
这样的命令实际上会反转维度的顺序,就像第二个例子所示的那样。你知道的,行优先和列优先。