gpt4 book ai didi

python - 使用旧版本的 NumPy 格式化 2D 数组

转载 作者:行者123 更新时间:2023-12-01 04:27:56 24 4
gpt4 key购买 nike

我有一个代码片段,用于将二维数组格式化为特定的字符串格式。该代码片段适用于最新版本的 NumPy(例如 1.9.2),但同样适用于 NumPy 1.4.1(CentOS 6.6 的当前版本)。

import numpy as np
cfmt = '%14.6E'
vfmt = np.vectorize(cfmt.__mod__)

Traceback (most recent call last):
File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1762, in __init__
nin, ndefault = _get_nargs(pyfunc)
File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1694, in _get_nargs
raise ValueError, 'failed to determine the number of arguments for %s' % (obj)
ValueError: failed to determine the number of arguments for <method-wrapper '__mod__' of str object at 0xb461e0>

来自Numpy-discussion ,这似乎是 functools.partial 的问题,建议使用 lambda 解决方法。然而,这是我失败的尝试:

vfmt1 = np.vectorize(lambda x: cfmt.__mod__(x))
vfmt2 = np.vectorize(lambda x: cfmt % (x,), ['|S14']) # attempt to specify otype

# A 2D array with shape (1, 3)
ar = np.array([[1.0e35, 9.999999, 10.0]])

print(vfmt1(ar)) # [[' 1.0000' ' 9.9999' ' 1.0000']]
print(vfmt2(ar)) # [[' 1.0000' ' 9.9999' ' 1.0000']]

这些值似乎是被剪辑为 8 个字符的字符串,本质上是垃圾。

使用最新版本的 NumPy 的预期格式化结果是:

array([['  1.000000E+35', '  9.999999E+00', '  1.000000E+01']], type='|S14')

关于如何使用旧版本的 NumPy 获得预期输出有什么建议吗?或者通常如何将数值数组的格式矢量化为字符数组?

最佳答案

如果您的输入数组是一维的,则可以使用简单的列表理解:

>>> ar
array([ 1.00000000e+35, 9.99999900e+00, 1.00000000e+01])
>>> ar2 = np.array(["%14.6E" % v for v in ar])
>>> ar2
array([' 1.000000E+35', ' 9.999999E+00', ' 1.000000E+01'],
dtype='|S14')

对于二维数组,嵌套列表理解将起作用。例如,这是一个二维数组x:

>>> x
array([[ 1.00000000e+35, 9.99999900e+00, 1.00000000e+01],
[ 1.23450000e-04, 0.00000000e+00, 1.23000000e+02]])

这是创建字符串列表列表的嵌套列表理解:

>>> [["%14.6E" % v for v in row] for row in x]
[[' 1.000000E+35', ' 9.999999E+00', ' 1.000000E+01'], [' 1.234500E-04', ' 0.000000E+00', ' 1.230000E+02']]

如果您需要结果为 numpy 数组,只需将其放入对 np.array 的调用中即可:

>>> np.array([["%14.6E" % v for v in row] for row in x])
array([[' 1.000000E+35', ' 9.999999E+00', ' 1.000000E+01'],
[' 1.234500E-04', ' 0.000000E+00', ' 1.230000E+02']],
dtype='|S14')

关于python - 使用旧版本的 NumPy 格式化 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com