我正在迭代 N 的范围:
for i in range(N):
angle1 = np.deg2rad(np.random.uniform(0, 10))
angle2 = np.deg2rad(np.random.uniform(0, 180))
interchange_indices = np.random.rand(i) < 0.5
angle1[interchange_indices], angle2[interchange_indices] = angle2[interchange_indices], angle1[interchange_indices]
kappa = evolve(angle1, angle2, L)
问题发生在
interchange_indices
,我得到了 IndexError: invalid index to scalar variable.
我最初将角度1(角度2类似)定义为
angle1 = np.deg2rad(np.random.uniform(0, 10, i))
,但由于使用i进行随机采样而出现问题。因此,我改用了low, high
方法。然而,它创造了这个新问题。我应该怎么办?预先感谢。
没有明确说明,但我假设您正在尝试执行以下操作:
发生索引错误是因为如所写,
angle1
和angle2
是标量,而不是数组。标量根本不支持索引。
import numpy as np
angle1 = np.deg2rad(np.random.uniform(0, 10))
angle1[True] # IndexError: invalid index to scalar variable.
如果
angle
是 0d 数组,则可以通过标量或 0d 数组对它们进行索引:
angle1 = np.asarray(np.deg2rad(np.random.uniform(0, 10)))
angle1[False] # array([], dtype=float64)
angle1[np.asarray(True)] # array([0.03021378])
但是你的问题是
interchange_indices
永远不是标量或 0d 数组;它是一个长度为i
的数组。
for i in range(3):
interchange_indices = np.random.rand(i) < 0.5
print(interchange_indices)
# []
# [False]
# [ True True]
您有两种选择来解决该错误。如果你想保持循环,你只需要
interchange_indices
是一个标量,并且你可能只想使用 if
语句而不是布尔索引。
N = 3
for i in range(N):
angle1 = np.deg2rad(np.random.uniform(0, 10))
angle2 = np.deg2rad(np.random.uniform(0, 180))
# interchange_indices = np.random.rand(i) < 0.5
# there should not be an `i` in the line above
# that would produce an array of length i, but angle1 and angle2 are scalars
interchange_indices = np.random.rand() < 0.5
if interchange_indices:
angle1, angle2 = angle2, angle1
print(angle1, angle2, interchange_indices)
# 0.14806055963275674 1.033872399798009 False
# 1.0644875532575504 0.08971188854189044 True
# 0.1720723141790743 0.32268645386711226 False
或者,我不明白你原来的方法有什么问题:
angle1 = np.deg2rad(np.random.uniform(0, 10, N))
angle2 = np.deg2rad(np.random.uniform(0, 180, N))
interchange_indices = np.random.rand(N) < 0.5
angle1[interchange_indices], angle2[interchange_indices] = (
angle2[interchange_indices], angle1[interchange_indices])
angle1, angle2, interchange_indices
没有说明
evolve
应该做什么。如果它只接受标量,您不妨使用第一种方法。如果它接受数组,请使用第二种方法。