最新更新:
>>> 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”)直接将它转换为float数组。
任何想法?
旧更新:
你的建议,但我找不到差异。
答案 0 :(得分:1)
评论中的建议对我来说很好。
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)
答案 1 :(得分:0)
我想知道你是如何得到这些列表的。这通常需要一些技巧。
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')