如果维度可以变化,如何访问数组元素?

2024-04-18 21:57:52 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我将数据存储在数组中

myList = array([('A', 3, 2, 5),('B', 3, 7, 0),dtype=[('f0', '<U128'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8')])

它有固定数量的列>;2和任意数量的行。 我想把第2列读入一个新数组。我知道我可以和你一起做

[x[1] for x in myList]

或者

list(zip(*myList))[1]

但我的例子中的问题是,在某些情况下数组只有一行,那么我只需要值myList[1]和上面的代码。我可以使用if条件,但我想知道是否有更有效的方法来处理数组,当维数可以变化时?你知道吗


Tags: 数据ingtfor数量数组arrayf2
3条回答

我试图重现这个问题。我制作了一个包含以下内容的txt文件:

'A', 3, 2, 5
'B', 3, 7, 0

用numpysgenfromtext加载此文件将导致您的数组。以下代码提取第一列,与行数无关:

import numpy as np

myList = np.genfromtxt("startFile.txt", dtype="U128,f8,f8", delimiter=",")
numRows = np.shape([myList])[0]
reshapedList = np.reshape(myList, (numRows, -1))
columnValues = [x[1] for x in reshapedList[0]]
print(f"column values: {columnValues}")

我希望这有帮助!你知道吗

如果myList是实际的numpy数组

def func(arr):
    if len(arr.shape) == 1:
        return arr[1]
    else:
        return arr[:, 1]

result = func(myList)

如果myList是类型list

def func(lst):
    if isinstance(lst[0], list):
        return [x[1] for x in lst]
    else:
        return lst[1]

这样行吗?你知道吗

myList = [[1],[1,2,3],[1,2]]
[*map(lambda x: x[1] if len(x)>1 else None,  myList)]

相关问题 更多 >