如何将一个对象转换成数组

3

我正在学习Python,处理对象时遇到了一些问题。我尝试寻找解决方案,但没有成功,所以现在向大家求助。

我想要获取对象的前X列,但由于每行大小不同,所以无法实现。

这是我的对象:

array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52],
       [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55],
       [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51],
       [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object)

我希望能够得到类似于这样的东西:

array([[45, 45, 45, 50],
       [45, 45, 45, 50],
       [45, 45, 45, 50],
       [50, 51, 52, 55]])

我该怎么做才能解决这个问题呢?感谢你的帮助。
阿尔瓦罗

1
你有一个1维4元素数组,dtype=object。每个元素都是一个列表。这基本上与列表的列表相同;最好将其视为这样处理。数组包装器并没有增加太多东西,甚至可能会减慢速度。 - hpaulj
2个回答

3

关于什么?

import numpy as np
data = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52],
                 [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55],
                 [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51],
                 [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object)
newData = np.array([d[:4] for d in data])

谢谢,那个可行!你认为有没有不用for循环的方法?比如说像数组函数或者其他什么的? - Alvaro Silva

0

你可能需要一个更通用的解决方案,可以按以下方式指定行数:

import numpy as np

arr = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52],
       [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55],
       [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51],
       [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object)

def slice_array(arr, num_cols, num_rows=None):
    if num_rows:
        return np.array([row[:num_cols] for row in arr[:num_rows]])
    return np.array([row[:num_cols] for row in arr])

res1 = slice_array(arr, 4, 2)
res2 = slice_array(arr, 4)  # Like in your case

结果:

>>> res1
array([[45, 45, 45, 50],
       [45, 45, 45, 50]])
>>> res2
array([[45, 45, 45, 50],
       [45, 45, 45, 50],
       [45, 45, 45, 50],
       [50, 51, 52, 55]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接