Python小问题

import numpy as np
y=np.zeros(shape=(1,5))
for n in np.linspace(1,5,5):
y[n-1]=n**2
print(y)

有什么问题,显示IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

出现这个问题是因为索引出现了浮点数,不是索引允许的数据类型,可以验证一下

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)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-28

你的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)

本回答被提问者采纳
第2个回答  2018-10-29
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]
第3个回答  2018-11-04
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)
{
第4个回答  2018-10-28
我的问题是什么问题

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网