我有一个numpy数组形状[12,8,5,5]。我想修改每个元素的第三维和第四维的值。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.]]
我可以修改使用两个for
循环中的所有x[i,j,:,:]
。但是,我想知道是否有没有运行两个循环的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维度,但是第三和第四维度总是相同的(即5x5)。
我只是想知道,如果我可以更新元素combined_weights [:,:,5,5]转置的值而不运行2 for循环。
谢谢。
你想在更新他们什么?可能不只是一个?请给出更多细节,因为它在这里有所不同。 –
我需要转置第三和第四 - D [i,j,:,:]的元素,然后更新数组。 – blackbug
为什么不使用'transpose'或'swapaxes'?他们会在一行中做 - 而且没有时间。 (这些功能只是改变数据布局,而不移动实际数据,所以它们超级便宜) –