私は形状が[12、8、5、5]のnumpy配列を持っています。各要素の3次元と4次元の値を変更したい。numpy配列の3次元要素と4次元要素を更新します
import numpy as np
x = np.zeros((12, 80, 5, 5))
print(x[0,0,:,:])
出力:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
修正値:
y = np.ones((5,5))
x[0,0,:,:] = y
print(x[0,0,:,:])
出力:
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
私は2つのfor
ループを使用して、すべてのx[i,j,:,:]
のために変更することができます。しかし、私は2つのループを実行せずにそれを行うためのpythonic方法があるかどうか疑問に思っていました。興味があるだけは知っている:)
UPDATE
実際の使用事例:
dict_weights = copy.deepcopy(combined_weights)
for i in range(0, len(combined_weights[each_layer][:, 0, 0, 0])):
for j in range(0, len(combined_weights[each_layer][0, :, 0, 0])):
# Extract 5x5
trans_weight = combined_weights[each_layer][i,j]
trans_weight = np.fliplr(np.flipud(trans_weight))
# Update
dict_weights[each_layer][i, j] = trans_weight
注:私は、combined_weightsのjは異なります寸法を。このリストには約200の要素があり、iとjの次元はさまざまですが、3次元と4次元は常に同じです(つまり5x5)。
2つのforループを実行せずに、combine_weights [、、:、5、5]要素を転置値で更新できるかどうかを知りたいだけです。
ありがとうございました。
は何でそれらを更新したいですか?おそらく単なるものではないでしょうか?ここに違いがあるので、詳細を教えてください。 –
3番目と4番目の要素[i、j、:、:]を転置して配列を更新する必要があります。 – blackbug
'transpose'や' swapaxes'を使わないのはなぜですか?彼らは1つの行でそれを行います - そして時間は全くありません。 (これらの関数は実際のデータを移動することなく、データレイアウトを変更するので、超安価です) –