使用字符串格式的numpy数组

时间:2016-11-01 13:38:15

标签: python numpy

给定:从字符串创建的numpy数组:

ftp.exe

首先关闭:此构造是否有特定的名称

这是数据类型

xy = np.array('4.9 3.5; 5.1 3.2; 4.7 3.1; 4.6 3.0; 5.0 5.4')

是什么 In [25]: xy Out[25]: array('4.9 3.5; 5.1 3.2; 4.7 3.1; 4.6 3.0; 5.0 5.4', dtype='|S43') ..

内部足够好..所以这是真正的问题:我们如何使用生成的数组:

|S43

结果与<{1}}的标准用法形成对比

In [31]: cov(xy)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-6d999a60c1da> in <module>()
----> 1 cov(xy)

  .. 
TypeError: cannot perform reduce with flexible type

那么..如何使用字符串化np.array语法来获得相同的结果?

更新我的不好:我正在将In [33]: xy = np.array([[4.9, 3.5],[5.1, 3.2],[ 4.7, 3.1],[ 4.6, 3.0],[ 5.0, 5.4]], dtype=float) In [35]: cov(xy) Out[35]: array([[ 0.98 , 1.33 , 1.12 , 1.12 , -0.28 ], [ 1.33 , 1.805, 1.52 , 1.52 , -0.38 ], [ 1.12 , 1.52 , 1.28 , 1.28 , -0.32 ], [ 1.12 , 1.52 , 1.28 , 1.28 , -0.32 ], [-0.28 , -0.38 , -0.32 , -0.32 , 0.08 ]]) numpy.array混在一起。后一个 支持字符串化语法。请参阅下面的答案。

3 个答案:

答案 0 :(得分:1)

问题:我正在将numpy.arraynumpy.matrix混合。

In [47]: np.matrix('1 2 3; 4 5 6')
Out[47]:
matrix([[1, 2, 3],
        [4, 5, 6]])

答案 1 :(得分:0)

您需要将字符串解析为可用格式,然后再将其传递给numpy.array。试试这个:

# original string
xy_str = '4.9 3.5; 5.1 3.2; 4.7 3.1; 4.6 3.0; 5.0 5.4'

# break into nested lists, pass to numpy.array
xy = numpy.array([list(map(float, v.split())) for v in  xy_str.split('; ')])

答案 2 :(得分:0)

将字符串转换为列表,例如正确示例中的列表。

orig_xy_str = '4.9 3.5; 5.1 3.2; 4.7 3.1; 4.6 3.0; 5.0 5.4'
new_xy = np.array([vals.split(' ') for vals in orig_xy_string.split('; ')], dtype=float)

>>> np.cov(new_xy)
array([[ 0.98 ,  1.33 ,  1.12 ,  1.12 , -0.28 ],
       [ 1.33 ,  1.805,  1.52 ,  1.52 , -0.38 ],
       [ 1.12 ,  1.52 ,  1.28 ,  1.28 , -0.32 ],
       [ 1.12 ,  1.52 ,  1.28 ,  1.28 , -0.32 ],
       [-0.28 , -0.38 , -0.32 , -0.32 ,  0.08 ]])

如果您无法控制初始输入(正如您所说&#34;给定从字符串&#34创建的numpy数组;),首先将数组转换为orig_xy_str = str(xy)的字符串