import numpy as np import cvxpy as cp x = cp.Variable((10), integer=True) y = cp.Variable((10, 10), integer=True) a = np.array([[9.4888, 5.6817], [8.7928, 10.3868], [11.5960, 3.9294], [11.5643, 4.4325], [5.6756, 9.9458], [9.8497, 17.6632], [9.1756, 6.1517], [13.1385, 11.8569], [15.4663, 8.8721], [15.5464, 15.5868]]) d = np.zeros((10, 10)) for i in range(10): for j in range(10): d[i, j] = np.sqrt(sum((a[:, i] - a[:, j]) ** 2)) obj = cp.Minimize(cp.sum(x)) cons = [sum(y) >= 1, sum(y.T) <= 5, x >= 0, x <= 1, y >= 0, y <= 1] for i in range(10): cons.append(x[i] == y[i, i]) for j in range(10): cons.append(d[i, j] * y[i, j] <= 10 * x[i]) cons.append(x[i] >= y[i, j]) prob = cp.Problem(obj, cons) prob.solve() print(prob.value, '\n', x.value, '\n', y.value)出现index 2 is out of bounds for axis 1 with size 2的问题,怎么改正
时间: 2024-04-16 14:27:29 浏览: 136
你遇到的问题是“index 2 is out of bounds for axis 1 with size 2”,这意味着你的数组索引超出了它的大小。根据你提供的代码,问题出现在以下这行代码:
```python
d[i, j] = np.sqrt(sum((a[:, i] - a[:, j]) ** 2))
```
在这个代码块中,`a` 是一个 10x2 的数组,但是在计算 `d[i, j]` 的时候,你使用了 `a[:, i]` 和 `a[:, j]`,这会导致索引超出范围。
为了解决这个问题,你需要确保 `i` 和 `j` 的取值范围都在 `0` 到 `9` 之间,而不是超过数组的大小。你可以将循环的范围修改为:
```python
for i in range(10):
for j in range(10):
d[i, j] = np.sqrt(sum((a[i, :] - a[j, :]) ** 2))
```
这样就能够正确计算 `d[i, j]` 的值,并且不会出现索引超出范围的错误。
阅读全文