对于选定数字的循环迭代(不使用范围)

For loop iteration over selected numbers (not using range)

这是一个示例代码,但基本上我只是尝试 select 特定范围的数字,比如 2、4 和 6,然后将 3D 随机值数组的第一个轴乘以第一个2 然后是 4 和 6,然后存储新数组(应该仍然是 3、30 和 10 的大小)。 我一直收到这个错误。我在做什么很简单,但我对我的 for 循环有什么问题感到困惑?我最初尝试 np.array([2,4,6]) 但我仍然遇到同样的错误。

data = np.random.rand(3,30,10)

data_new = np.zeros((data.shape))

for i in [2,4,6]:
    data_new[i,:,:] = data[i]*i

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/tmp/ipykernel_202420/2883607738.py in <module>
      4 
      5 for i in [2,4,6]:
----> 6     data_new[i,:,:] = data[i]*i
      7 

IndexError: index 4 is out of bounds for axis 0 with size 3

我想你的意思是:

for i in [2,4,6]:
    data_new[:, :, i] = data[:, :, i]*i

这应该可以解决问题:

data = np.random.rand(3,30,10)

data_new = data*np.array([2, 4, 6]).reshape(-1, 1, 1)

例如:

import numpy as np
arr = np.ones((3, 2, 2))
print(f'arr = \n{arr}')
arr_new = arr*np.array([2, 4, 6]).reshape(-1, 1, 1)
print(f'arr_new = \n{arr_new}')

输出:

arr = 
[[[1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]]]
arr_new = 
[[[2. 2.]
  [2. 2.]]

 [[4. 4.]
  [4. 4.]]

 [[6. 6.]
  [6. 6.]]]

data.shape[0] 显示 first axis 的大小,而这个大小是 3,因此您不能调用 data[4]data_new[4],如果您想要 first axis,试试这个:

for i in range(data.shape[0]):
    data_new[i] = data[i]*i

或者,如果您想要 select first axis 并乘以 2,4,6 ,...您需要像下面这样枚举:

for idx, num in enumerate([2,4,6]):
    data_new[idx] = data[idx]*num