嗨我正在嘗試將 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]) 不能像我想要的那樣作業?
uj5u.com熱心網友回復:
您的問題是您將字串放回 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')
uj5u.com熱心網友回復:
你特別告訴 numpy 使用
dtype=float
現在,如果您訪問/寫入陣列的元素,numpy 會自動嘗試將輸入(在您的情況下為“str”)轉換回浮點數。
請參閱以獲得更好的解釋:
import numpy as np
a=np.array([1.0,2.0,3.3])
a[0]="abc"
導致“ValueError:無法將字串轉換為浮點數:'abc'”
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429373.html
