为什么 str() 不适用于 Python np 数组元素?

Why str() does not work for Python np array element?

你好,我正在尝试将 np 数组中的元素转换为字符串,以便我可以输出它们

with open("multiplication.txt", 'w') as output:
    with open("data0.txt") as orig:
        lines = orig.readlines()
        for line in lines:  # one line 
            b = np.fromstring(line, dtype=float, sep=' ') # convert to np array
            for i in range(0, len(b)):  #chage number values in b
                if (b[i] > 3):
                    b[i] = str(5 * b[i]) 
                else:
                    b[i] = str(3 * b[i]) 
            output.write('\t'.join(string_b) + '\n')

当我 运行 代码时出现错误:

Traceback (most recent call last):

  File "C:\Users\Khant\Desktop\ex2.py", line 89, in <module>
    output.write('\t'.join(b) + '\n')

TypeError: sequence item 0: expected str instance, float found

然后我发现虽然我有b[i] = str(5 * b[i]) 但是b中的元素实际上仍然是浮点数而不是字符串。所以我必须像这样更改代码:

//...same code as above...//
for i in range(0, len(b)):  #chage number values in b
   if (b[i] > 3):
     b[i] = 5 * b[i]
   else:
     b[i] = 3 * b[i]
string_b = [str(int(elem)) for elem in b]  # convert to string
output.write('\t'.join(string_b) + '\n')

这次代码运行正常。所以我只是想知道为什么 b[i] = str(5 * b[i]) 不能像我想要的那样工作?

你特别告诉 numpy 使用

dtype=float

现在,如果您 access/write 到数组的一个元素,numpy 会自动尝试将输入(在您的情况下为“str”)转换回浮点数。

查看更好的解释:

import numpy as np
a=np.array([1.0,2.0,3.3])
a[0]="abc"

结果为“ValueError:无法将字符串转换为浮点数:'abc'”

您的问题是您正在将字符串放回您的 numpy 数组中。 Numpy 中的数组只接受一种值,即 dtype。如果其他类型是单独分配的,则其他类型会转换为该类型(例如,将浮点数分配给整数数组会丢失浮点数详细信息)。如果在执行循环后打印出 b,您会看到每个字符串值都已转换回浮点数(如果这不起作用,则会引发异常)。

更好的方法可能是完成所有数学运算,然后将数组转换为包含字符串(尽管不使用 Numpy 的替代方法也可能是合理的)。这可能看起来像(替换内部循环):

mask = b > 3  # might as well use numpy stuff for the math, if we're using arrays
b[mask] *= 5
b[~mask] *= 3

string_b = b.astype(str)
output.write('\t'.join(string_b) + '\n')