为什么 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')
你好,我正在尝试将 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')