python - 在 for 循环中使用相应的 3D numpy 数组

标签 python arrays numpy for-loop

我想知道使用相应 3D 数组的最佳方法是什么。所以我创建了3个不同的numpy数组,像这样(这只是一个例子,3D数组可以更大),我想做的是替换arr每个数组中的一些“部分”通过 arr2 中的值和arr3 。例如,在我的代码中我想替换 arr[0, 2:] (带有这些的行部分)按 arr2 中的值然后是 arr[2:, 1] 部分(带有 1 的列部分)按 arr3 中的值我正在考虑使用 zip但我遇到了麻烦,我的代码是下一个

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


问题不仅如此,而且,我有3个不同的数组,所以我不想在完成替换行部分后创建一个不必要的列表,然后使用这个列表来替换列部分(如果有)更简单的方法,我想要的输出是下一个

 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 的第一个 2D 数组中的值和arr3arr 中的第二个二维数组执行相同的操作和 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])

关于python - 在 for 循环中使用相应的 3D numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62798696/

相关文章:

python - Apache Beam Google Datastore ReadFromDatastore 实体 protobuf

python - 在重复迭代期间更有效的洗牌

java - 如何从 Java 中的另一个数组创建子数组?

python - 2件套搭配美汤精选

javascript - 循环数组并在jquery中的动态文本框中填充值

arrays - Python - 针对标量值测试数组中的所有值

python - 如何计算numpy中多个项目的出现次数?

python - 在 pandas 数据系列中获取 NAN 索引的最佳方法是什么

python - "Densifying"重新排列行/列的非常大的稀疏矩阵

python - 如何使用python获取列表中单个字符串中的值而不用逗号分隔csv文件中的值?