Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:基于输入从列表中获取项_Python_List_Numpy - Fatal编程技术网

Python:基于输入从列表中获取项

Python:基于输入从列表中获取项,python,list,numpy,Python,List,Numpy,我理解这可能不是直接可能的,所以我很感兴趣的是,对于一般情况,您将如何着手解决这个问题。 我有一个类似这样的列表项,[(数组,时间),(数组,时间)…]数组是一个numpy数组,可以有任意n×m维。这将看起来像数组[[导数维度1],[导数维度2]…] 从列表中,我需要一个函数来创建两个列表,其中包含传递给它的位置处的所有值。然后可以使用这些数据进行绘图。 我可以考虑用其他数据结构来实现这一点,但不幸的是,这不是一个选项 基本上我想要的是 def f(list, pos1, pos2):

我理解这可能不是直接可能的,所以我很感兴趣的是,对于一般情况,您将如何着手解决这个问题。 我有一个类似这样的列表项,
[(数组,时间),(数组,时间)…]
数组是一个numpy数组,可以有任意n×m维。这将看起来像
数组[[导数维度1],[导数维度2]…]

从列表中,我需要一个函数来创建两个列表,其中包含传递给它的位置处的所有值。然后可以使用这些数据进行绘图。 我可以考虑用其他数据结构来实现这一点,但不幸的是,这不是一个选项

基本上我想要的是

def f(list, pos1, pos2):
    xs = []
    ys = []
    for i in list:
        ys.append(i pos1)
        xs.append(i pos2)
    return xs, ys
其中
i pos1
相当于
i[n][m]
真正的问题是当它是1乘1,所以我不能只传递整数。 任何建议都将是伟大的,对不起,这篇文章有点长,我想说清楚。
谢谢

如果我正确理解了您的问题,您基本上希望从列表列表中选择索引,并根据该选择创建新列表

从列表列表中选择索引相当简单,特别是当您有固定数量的选择时:

parts = [(item[pos1], item[pos2]) for item in list]
使用内置功能,从这些选择创建新列表也相当容易:

separated = zip(*parts)
def f( list, pos1, pos2 ):
    partsgen = ((item[pos1], item[pos2]) for item in list)
    return zip(*partsgen)
通过在最终函数中使用生成器表达式而不是列表理解,可以进一步减少内存使用:

separated = zip(*parts)
def f( list, pos1, pos2 ):
    partsgen = ((item[pos1], item[pos2]) for item in list)
    return zip(*partsgen)
下面是它在实际中的表现:

>>> f( [['ignore', 'a', 1], ['ignore', 'b', 2],['ignore', 'c', 3]], 1, 2 )
[('a', 'b', 'c'), (1, 2, 3)]

更新:重新阅读问题和评论后,我意识到这有点过于简化了。但是,当您交换pos1和pos2以对包含的数组进行适当的索引时,一般的想法仍然有效

如果我理解你的问题,下面的内容应该简单快捷,特别是如果你需要多次这样做的话:

z = np.dstack([ arr for arr, time in lst ])
x, y = z[pos1], z[pos2]
例如:

In [42]: a = arange(9).reshape(3,3)
In [43]: z = np.dstack([a, a*2, a*3])
In [44]: z[0,0]
Out[44]: array([0, 0, 0])
In [45]: z[1,1]
Out[45]: array([ 4,  8, 12])
In [46]: z[0,1]
Out[46]: array([1, 2, 3])

检查以使您的问题更具可读性。在
i[n][m]
中,什么是
n
m
?所有数组的维度是否相同?您还不清楚数组是什么样的。它们的形状是否都是二维的?此外,你到底想从中提取什么?例如,对
f
的一次调用是否会将每个数组中的arr[2,2]和arr[4,3]元素作为列表返回?很好,其中有些位我没有想到要优化。基本问题是,当数组是1d时,你称它为数组[i],当它是2d时,你称它为数组[i][j],没有两种不同的情况,我不知道如何处理这个问题。@Roobs:只要使用arr.restrape将所有内容都变成2d数组就行了。