出现这个问题是因为索引出现了浮点数,不是索引允许的数据类型,可以验证一下
import numpy as np
y=np.zeros(shape=(1,5))
arr = [n for n in np.linspace(1,5,5)]
arr里存储的就是源代码中会用的索引,下图是结果
是浮点型的,所以我们只需要更改一下:
import numpy as np
y=np.zeros(shape=(1,5))
for n in np.int16(np.linspace(1,5,5)):
y[n-1]=n**2
print(y)
此时这个代码中还有问题,索引会超出范围,这是因为python的索引是从0开始的,数组的第一维是需要的。
正确的代码如下:
import numpy as np
y=np.zeros(shape=(1,5))
for n in np.int16(np.linspace(1,5,5)):
y[0,n-1]=n**2
print(y)
你的Python程序y=np.zeros(shape=(1,5))有问题,定义一个有5个元素的数组并填充0,应该这样写y=np.zeros(shape=5)
还有np.zeros()函数建立的数组缺省是float型的数组,所以要指定数据类型为int型,所以y=np.zeros(shape=(1,5))应该改成y=np.zeros(shape=5,dtype=int)
而且np.linspace()函数建立的数列缺省也是float型的数列,所以需要指定数据类型为int型,所以for n in np.linspace(1,5,5):需要改成for n in np.linspace(1,5,5,dtype=int):,这样n的类型就是int型了,语句y[n-1]=n**2就不会报要求int型的n的错误了.
完整的Python程序如下(改动的地方见注释)
import numpy as np
y=np.zeros(shape=5,dtype=int) #这里把y=np.zeros(shape=(1,5))改成y=np.zeros(shape=5,dtype=int)
for n in np.linspace(1,5,5,dtype=int):#这里把for n in np.linspace(1,5,5):改成for n in np.linspace(1,5,5,dtype=int):
y[n-1]=n**2
print(y)
np.linspace(1,5,5)生成的数组中的元素全是小数的
所以n-1不能作为y的下标使用,最起码应该加上int将n取个整
再说说另一个,你是要在遍历过程中修改一个数组中的元素,使用的赋值方式不对:
y = np.zeros(shape=(1, 5))
for n in np.linspace(1, 5, 5):
y[0][int(n) - 1] = n ** 2
print(y)
最开始你创建的是一个只有一行的数组,所以数组中的元素表达是为y[0][X]
typedef struct lista{
struct lista *next;
int data;
}list;
void insert(list *h);
void del(list *h);
int main()
{
int flag;
list *head=(list *)malloc(sizeof(list));
head->next=NULL;
while(1)
{
我的问题是什么问题