对于选定数字的循环迭代(不使用范围)
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
这是一个示例代码,但基本上我只是尝试 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