0

ある配列から値を取得し、それらを関数に通して別の配列に入れる必要があります。これは、ネストされた for ループのペアを使用して行うことを意図しています。助けてください。完全初心者はこちら。

編集: 明確にするために、さまざまな値を持つ 2 次元配列があります。これらすべての値に関数を適用し、関数を通過した後に値を含む 2 次元配列を返したいと考えています。私はpythonで働いています。迅速な対応と、ご協力いただきありがとうございます。

EDIT3: コード例:

import numpy as N

def makeGrid(dim):
    ''' Function to return a grid of distances from the centre of an array.
    This version uses loops to fill the array and is thus slow.'''
    tabx = N.arange(dim) - float(dim/2.0) + 0.5
    taby = N.arange(dim) - float(dim/2.0) + 0.5
    grid = N.zeros((dim,dim), dtype='float')
    for y in range(dim):
        for x in range(dim):
            grid[y,x] = N.sqrt(tabx[x]**2 + taby[y]**2)
    return grid

import math

def BigGrid(dim):
    l= float(raw_input('Enter a value for lambda: '))
    p= float(raw_input('Enter a value for phi: '))
    a = makeGrid 
    b= N.zeros ((10,10),dtype=float) #Create an arry to take the returned values
    for i in range(10):
        for j in range (10):
            b[i,j] = a[i][j]*2


if __name__ == "__main__":
    ''' Module test code '''
    size = 10 #Dimension of the array
    newGrid = BigGrid(size)
    newGrid = N.round(newGrid, decimals=2)
    print newGrid
4

7 に答える 7

1

あなたの質問に基づいて、Numpy を使用しているようです。速度をあまり気にしない場合は、単純に numpy 配列を使用して関数を呼び出すことができます。関数は配列全体で動作します。

繰り返しを明示的に記述する必要はありませんが、numpy の特別な機能を利用する方法を見つけることができれば、一度に 1 つの要素を操作するように設計された関数を使用するよりも高速になります。ただし、非常に大きなデータセットを使用している場合を除き、これで問題ありません。

import numpy as np
>>> g = np.array( [ [1,2,3], [ 4,5,6] ] )
array([[1, 2, 3],
       [4, 5, 6]])
>>> def myfunc( myarray ):
...     return 2 * myarray
... 
>>> myfunc(g)
array([[ 2,  4,  6],
       [ 8, 10, 12]])
于 2012-12-10T16:16:03.697 に答える
1
def map_row(row):
    return map(some_function,row)

 map(map_row,my_2d_list)

おそらく私はそれを行う方法です...

于 2012-12-10T15:45:22.460 に答える
0

これは、二重マップのある1行です

map(lambda x:map(func, x), l)

例:

l=[[1,2,3],[4,3,1]]
map(lambda x:map(lambda x:x*10,x),l)

[[10, 20, 30], [40, 30, 10]]
于 2012-12-10T15:42:22.413 に答える
0

質問からコンテキストの観点から得られるものと、2d-array通常は次のことをしようとしているように見えることから:

>>>> array2d = [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> def add_two( v ):
...     return v + 2
... 
>>> [ [ add_two( v ) for v in row ] for row in array2d ]
[[2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6]]

上記は、ネストされた 2 つの for ループを使用するのと同じリスト内包表記を使用します。この場合、より読みやすく、メソッドを構築するのではなくlist説明しているため、メソッドの直接的な相互作用が少なくなります。list

于 2012-12-10T15:34:40.773 に答える
0

ネストされたループで簡単に実行できます。

def my_function(n): # n will become y from the next part
   new_num = # do whatever you want with it
   return new_num

my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # just an example
new_list, final_list = [], [] # multiple assignment
for x in my_list:
   print x
   new_list = []
   for y in x:
      # y is now the first value of the first value of my_list--- 1.
      my_num = my_function(y)
      new_list.append(my_num)
   final_list.append(new_list)
print final_list

それはそれを行う必要があります。

戻り値: [[2, 3, 4], [5, 6, 7], [8, 9, 10]].

于 2012-12-10T15:58:26.540 に答える
-2
for(int i; i < x; i++)
   for(int j; j < y; j++)
       array2[i][j] = func(array2[i][j])

そんな感じ?

于 2012-12-10T15:04:26.913 に答える