【问题标题】:how to convert a np array of lists to a np array如何将 np 列表数组转换为 np 数组
【发布时间】:2018-08-28 02:23:31
【问题描述】:

最新更新:

>>> a = np.array(["0,1", "2,3", "4,5"])
>>> a
array(['0,1', '2,3', '4,5'], dtype='|S3')
>>> b = np.core.defchararray.split(a, sep=',')
>>> b
array([list(['0', '1']), list(['2', '3']), list(['4', '5'])], dtype=object)
>>> c = np.array(b).astype(float)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.

旧:

我有一个这样的 np 数组:

array([[list(['3', '6']), list(['2', '1'])],
       [list(['0', '7']), list(['1', ' 9'])]], dtype=object)

我想把它转换成这样的字符串的 np 数组:

array([[['3', '6'], ['2', '1']],
       [['0', '7'], ['1', ' 9']]], dtype=object)

这样我就可以使用 astype("float32") 直接将其转换为浮点数组。

有什么想法吗?

旧更新:

enter image description here

感谢您的建议,但我找不到区别。

【问题讨论】:

  • 你试过np.array(array)
  • 甚至np.array(arr).astype(float)
  • @cᴏʟᴅsᴘᴇᴇᴅ 是的。但是,它使数组保持其原始形状和类型。
  • @jpp 谢谢你的回复。 np.array() 在这种情况下不起作用。
  • 那么你肯定有大小不等的参差不齐的数组。

标签: python numpy


【解决方案1】:

cmets 中的建议对我来说很好。

arr = np.array([list(['0', '1']), list(['2', '3']), list(['4', '5'])], dtype=object)

res = np.array(arr).astype(float)

print(res, res.dtype, res.shape)

# [[ 0.  1.]
#  [ 2.  3.]
#  [ 4.  5.]] float64 (3, 2)

【讨论】:

  • 嗨 jpp,你能看看我更新的图片吗?我不能像你的例子那样工作。
  • 嗨 jpp,您没有将 list 的 2-d np 数组转换为 3-d np 数组,np.array() 中的参数是 list 数组的数组......它们是不同的。
  • 还是不明白。结果 一个 3d 数组,请参阅更新 shape 输出。
  • 我几乎可以肯定 OP 的数据根本不像这个完美的 MCVE。他们有一系列参差不齐的列表,但出于某种原因,他们似乎在躲避……啊:|
  • @jpp 嗨,在我的问题中,原始数组是一个二维 np 数组,其元素是列表类型。在您的回答中, arr 是一个 3-D np 数组。
【解决方案2】:

我想知道您是如何获得列表数组的。这通常需要一些技巧。

In [2]: >>> a = np.array(["0,1", "2,3", "4,5"])
   ...: >>> b = np.core.defchararray.split(a, sep=',')
   ...: 
In [4]: b
Out[4]: array([list(['0', '1']), list(['2', '3']), list(['4', '5'])], dtype=object)

再次调用数组并不会改变事情:

In [5]: np.array(b)
Out[5]: array([list(['0', '1']), list(['2', '3']), list(['4', '5'])], dtype=object)

stack 有效 - 它将 b 视为元素列表,在本例中为列表,并将它们连接到新轴上

In [6]: np.stack(b)
Out[6]: 
array([['0', '1'],
       ['2', '3'],
       ['4', '5']], dtype='<U1')
In [7]: np.stack(b).astype(float)
Out[7]: 
array([[0., 1.],
       [2., 3.],
       [4., 5.]])

但是您的“旧”案例是一个二维列表数组。这个堆栈技巧不起作用,至少不能直接起作用。

In [8]: a = np.array(["0,1", "2,3", "4,5","6,7"]).reshape(2,2)
In [9]: b = np.core.defchararray.split(a, sep=',')
In [11]: np.stack(b)
Out[11]: 
array([[list(['0', '1']), list(['2', '3'])],
       [list(['4', '5']), list(['6', '7'])]], dtype=object)

In [12]: np.stack(b.ravel())
Out[12]: 
array([['0', '1'],
       ['2', '3'],
       ['4', '5'],
       ['6', '7']], dtype='<U1')

In [13]: np.array(b.tolist())
Out[13]: 
array([[['0', '1'],
        ['2', '3']],

       [['4', '5'],
        ['6', '7']]], dtype='<U1')

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多