2

私はpythonとnumpyが初めてなので、質問が明らかな場合は申し訳ありません。インターネットで調べても、正しい答えが見つかりませんでした。Python で未知のサイズの 2 次元 (a.ndim -->2) 配列を作成する必要があります。出来ますか?リストを通過する 1 次元の方法を見つけましたが、2 次元では運がありません。

for i in range(0,Nsens):
    count=0
    for l in range (0,my_data.shape[0]):
        if my_data['Node_ID'][l]==sensors_name[i]:
            temp[count,i]=my_data['Temperature'][l]
            count=count+1
        else:
            count=count

temp は、初期化する必要がある配列です。

4

3 に答える 3

2

これは、numpy で未知のサイズの配列を埋めるかなり高性能な (正確なサイズに初期化するよりは遅いですが) 方法を示しています。

data = numpy.zeros( (1, 1) )
N = 0
while True:
    row = ...
    if not row: break
    # assume every row has shape (K,)
    K = row.shape[0]
    if (N >= data.shape[0]):
        # over-expand: any ratio around 1.5-2 should produce good behavior
        data.resize( (N*2, K) )
    if (K >= data.shape[1]):
        # no need to over-expand: presumably less common
        data.resize( (N, K+1) )
    # add row to data
    data[N, 0:K] = row

# slice to size of actual data
data = data[:N, :]

あなたのケースに適応する:

if count > temp.shape[0]:
    temp.resize( (max( temp.shape[0]*2, count+1 ), temp.shape[1]) )
if i > temp.shape[1]:
    temp.resize( (temp.shape[0], max(temp.shape[1]*2, i+1)) )
# now safe to use temp[count, i]

また、実際のデータ サイズ (最大カウント、最大 i) を追跡し、後で配列をトリミングすることもできます。

于 2012-11-22T08:30:10.573 に答える
0

フォローアップのコメントを考えると、次のようなことをしようとしているようです。

arr1 = { 'sensor1' : ' ', 'sensor2' : ' ', 'sensor_n' : ' ' }   #dictionary of sensors (a blank associative array)
                                                                #take not of the curly braces '{ }'
                                                                #inside the braces are key : value pairs
arr1['sensor1'] = 23
arr1['sensor2'] = 55
arr1['sensor_n'] = 125

print arr1

for k,v in arr1.iteritems():
    print k,v

for i in arr1:
    print arr1[i]

辞書に関する Python チュートリアルは、あなたが求めている洞察を与えることができるはずです。

于 2012-12-13T23:56:48.590 に答える
0

numpy では、初期化中に配列のサイズを指定する必要があります。後で、必要に応じて配列を拡張できます。

ただし、配列の拡張は推奨されておらず、最後の手段として行う必要があることに注意してください。

scipy 配列を動的に拡張する

于 2012-11-21T18:56:20.960 に答える