2013-04-04 80 views
1

我對Python很陌生。我知道這個錯誤發生在一個人試圖用一個分數乘以一個字符串,即float。在我的情況下,我無法弄清楚numpy浮點數組是一個字符串。這是完整的代碼。TypeError:無法乘以類型爲'float'的非int類型的序列:使用NumPy數組的問題

#!usr/bin/python 

import os 
import numpy as np 
import matplotlib.pyplot as plt 
import pylab 
from numpy import * 

# Declaration of constants 

K = 3.14159265359 
N= 10 
p_za=[] 
pv_za_temp=[] 
#----------------------- 
#Allotment of particles 
#----------------------- 

p_initial = np.linspace(0,2,num=10) 

pv_za_temp.append(np.array(p_initial)) 

print pv_za_temp 

#Displacement of particles using Zeldovich Approximation 
def t_range(start, end, step): 
    while start <= end: 
    yield start 
    start += step 

for t in t_range(0,1,0.1): 
    print t 
    p_za=[] 
    pv_za=[] 
    # Opening file in file_t format 
    fname = 'file_' + str(t) + '.dat' 
    fo = open(fname,'w') 

# p_za.append(p_initial - t*K*np.sin(K*p_initial)) 
    pv_za.append(K*np.sin(K*pv_za_temp)) 
    pv_za_temp = [] 
    pv_za_temp.append(np.array(pv_za)) 

是示出錯誤的行是:

pv_za.append(K*np.sin(K*pv_za_temp)) 

我不能找出問題。當這條線顯示錯誤時,它上面的線完美地工作。錯誤信息是:

Traceback (most recent call last): 
    File "ZA.py", line 40, in <module> 
    pv_za.append(K*np.sin(K*pv_za_temp)) 
TypeError: can't multiply sequence by non-int of type 'float' 

請幫忙!

回答

0

pv_za_temp是一個普通的Python列表,它不支持標量乘法。你需要一個NumPy的數組,你可以從一個完整列表,通過使用

pv_za_temp = np.array(pv_za_temp) 

注意創建.array不支持.append。請提前完整建立列表,或者根據情況使用hstackvstack

+0

'回溯(最近最後一次通話): 文件 「ZA.py」 22行,在 pv_za_temp.append(np.array(p_initial)) AttributeError的: 'numpy.ndarray' 對象有沒有屬性' append''這個錯誤在試圖將列表轉換爲NumPy數組後立即顯示出來[pv_za_temp = []' – Moksha 2013-04-04 07:30:55

+0

是的......可以使用'pv_za_temp = np.array(p_initial)':)來解決這個錯誤 – Moksha 2013-04-04 07:39:08

+0

這是主題的輕微轉移。我不知道我是否應該開始一個新的線程。如何將NumPy浮點數組寫入文件?這是我得到的錯誤fo.write('{0:f} {1:f} \ n'.format(np.array(p_initial),np.array(pv_za))) ValueError:Unknown format代碼'f'用於'str''類型的對象 – Moksha 2013-04-04 07:42:44

相關問題