Python 在for循环中使用相应的3D numpy阵列
我想知道使用相应的3D阵列的最佳方式是什么。因此,我创建了3个不同的numpy数组,如下所示(这只是一个示例,3D数组可以更大),我试图用Python 在for循环中使用相应的3D numpy阵列,python,arrays,numpy,for-loop,Python,Arrays,Numpy,For Loop,我想知道使用相应的3D阵列的最佳方式是什么。因此,我创建了3个不同的numpy数组,如下所示(这只是一个示例,3D数组可以更大),我试图用arr中的值替换arr2和arr3中的一些“部分”。例如,在我的代码中,我想用arr2中的值替换arr[0,2:://code>(行部分替换为1),然后用arr3中的值替换zip中的值替换arr[2:,1](列部分替换为1),但我遇到了麻烦,我的代码是下一个 import numpy as np arr = np.array([[[0., 1., 1., 1
arr
中的值替换arr2
和arr3
中的一些“部分”。例如,在我的代码中,我想用arr2
中的值替换arr[0,2:://code>(行部分替换为1),然后用arr3
中的值替换zip
中的值替换arr[2:,1]
(列部分替换为1),但我遇到了麻烦,我的代码是下一个
import numpy as np
arr = np.array([[[0., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.],
[0., 1., 0., 1., 0.],
[0., 1., 1., 0., 1.],
[0., 1., 0., 1., 0.]],
[[0., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.],
[0., 1., 0., 0., 1.],
[0., 1., 0., 0., 1.],
[0., 1., 1., 1., 0.]]])
arr2 = np.array([[[43, 25, 21],
[28, 43, 28]],
[[38, 29, 46],
[48, 27, 33]]])
arr3 = np.array([[[43, 43, 45],
[28, 24, 38]],
[[32, 26, 30],
[40, 23, 20]]])
for i, j in zip(arr, arr2):
for k in j:
i[0, 2:] = k
print(i)
#output
#[[ 0. 1. 48. 27. 33.]
# [ 0. 0. 0. 0. 0.]
# [ 0. 1. 0. 0. 1.] #The last array in arr with the last array in arr2
# [ 0. 1. 0. 0. 1.] #It does almost what I need, but not quite
# [ 0. 1. 1. 1. 0.]]
#If I try using append like
aux = []
for i, j in zip(arr, arr2):
for k in j:
aux.append(i[0, 2:] = k)
#I get an error
#keyword can't be an expression
newarr = [[[0., 1., 43., 25., 21.],
[0., 0., 0., 0., 0.],
[0., 43., 0., 1., 0.],
[0., 43., 1., 0., 1.],
[0., 45., 0., 1., 0.]],
[[0., 1., 28., 43., 28.],
[0., 0., 0., 0., 0.],
[0., 28., 0., 1., 0.],
[0., 24., 1., 0., 1.],
[0., 38., 0., 1., 0.]],
[[0., 1., 38., 29., 46.],
[0., 0., 0., 0., 0.],
[0., 32., 0., 0., 1.],
[0., 26., 0., 0., 1.],
[0., 30., 1., 1., 0.]],
[[0., 1., 48., 27., 33.],
[0., 0., 0., 0., 0.],
[0., 40., 0., 0., 1.],
[0., 23., 0., 0., 1.],
[0., 20., 1., 1., 0.]]]
问题不仅在于,而且,我有3个不同的数组,所以我不想在替换完行部分后创建一个不必要的列表,然后用这个列表替换列部分。如果有更简单的方法,我想要的输出就是下一个
import numpy as np
arr = np.array([[[0., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.],
[0., 1., 0., 1., 0.],
[0., 1., 1., 0., 1.],
[0., 1., 0., 1., 0.]],
[[0., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.],
[0., 1., 0., 0., 1.],
[0., 1., 0., 0., 1.],
[0., 1., 1., 1., 0.]]])
arr2 = np.array([[[43, 25, 21],
[28, 43, 28]],
[[38, 29, 46],
[48, 27, 33]]])
arr3 = np.array([[[43, 43, 45],
[28, 24, 38]],
[[32, 26, 30],
[40, 23, 20]]])
for i, j in zip(arr, arr2):
for k in j:
i[0, 2:] = k
print(i)
#output
#[[ 0. 1. 48. 27. 33.]
# [ 0. 0. 0. 0. 0.]
# [ 0. 1. 0. 0. 1.] #The last array in arr with the last array in arr2
# [ 0. 1. 0. 0. 1.] #It does almost what I need, but not quite
# [ 0. 1. 1. 1. 0.]]
#If I try using append like
aux = []
for i, j in zip(arr, arr2):
for k in j:
aux.append(i[0, 2:] = k)
#I get an error
#keyword can't be an expression
newarr = [[[0., 1., 43., 25., 21.],
[0., 0., 0., 0., 0.],
[0., 43., 0., 1., 0.],
[0., 43., 1., 0., 1.],
[0., 45., 0., 1., 0.]],
[[0., 1., 28., 43., 28.],
[0., 0., 0., 0., 0.],
[0., 28., 0., 1., 0.],
[0., 24., 1., 0., 1.],
[0., 38., 0., 1., 0.]],
[[0., 1., 38., 29., 46.],
[0., 0., 0., 0., 0.],
[0., 32., 0., 0., 1.],
[0., 26., 0., 0., 1.],
[0., 30., 1., 1., 0.]],
[[0., 1., 48., 27., 33.],
[0., 0., 0., 0., 0.],
[0., 40., 0., 0., 1.],
[0., 23., 0., 0., 1.],
[0., 20., 1., 1., 0.]]]
因此,arr
中的第一个二维数组复制自身,然后替换arr2
和arr3
的第一个二维数组中的值,并对arr
中的第二个二维数组和arr2
和arr3
中的第二个二维数组执行相同的操作,如果你能给我指出正确的方向,我将不胜感激,谢谢 更简单的方法是-
out = arr.repeat(2,axis=0)
out[:,0,2:] = arr2.reshape(-1,arr2.shape[2])
out[:,2:,1] = arr3.reshape(-1,arr3.shape[2])
我在这里,试图重新发明轮子,非常感谢!干净利落simple@Divakar:我建议您添加另一行帮助测试解决方案:assert np.all(out==newarr)
。