Python小问题

importnumpyasnpy=np.zeros(shape=(1,5))forninnp.linspace(1,5,5):y[n-1]=n**2print(y)有什么... 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
展开
 我来答
晴天Sunshinee
2018-11-06
知道答主
回答量:14
采纳率:0%
帮助的人:4万
展开全部

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

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)
紫薇参星
科技发烧友

2018-10-28 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3489万
展开全部

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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
傲天双雨
2018-10-29 · TA获得超过202个赞
知道答主
回答量:77
采纳率:88%
帮助的人:36.8万
展开全部
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]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
腾讯电脑管家
2018-11-04 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
展开全部
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)
{
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱思狂雪
2018-10-28 · 超过29用户采纳过TA的回答
知道答主
回答量:98
采纳率:50%
帮助的人:52.1万
展开全部
我的问题是什么问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式