You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用np.fromfunction创建矩阵触发ValueError的修复求助

解决numpy.fromfunction触发的ValueError问题

问题根源

你代码里的i==j会生成一个布尔数组,而Python的if语句无法直接判定整个数组的真值——numpy不知道你是要求数组里任意元素为真还是全部元素为真,所以抛出这个错误。

两种修改方案

方案1:用np.where替换条件表达式

直接把lambda里的三元判断换成np.where,它原生支持数组级别的条件选择:

import numpy as np

n = int(input("Enter the value of n for the nxn matrix: "))

a = np.fromfunction(lambda i, j: np.where(i == j, n, (i+1) + (j+1)), (n,n), dtype=int)
print(a)

方案2:通过广播+对角线赋值构造矩阵

换一种思路,先利用numpy广播生成基础矩阵,再单独设置对角线元素,逻辑更清晰:

import numpy as np

n = int(input("Enter the value of n for the nxn matrix: "))

# 生成i+1 + j+1的矩阵(i是行索引,j是列索引)
a = (np.arange(n)[:, None] + 1) + (np.arange(n) + 1)
# 把对角线元素替换为n
np.fill_diagonal(a, n)
print(a)

补充说明

  • 方案1贴合你原本的代码结构,只需要修改lambda内的条件部分,改动最小。
  • 方案2避免了条件判断,对于大矩阵来说运算效率更高,也更容易理解矩阵的构造逻辑。

内容的提问来源于stack exchange,提问作者LordPol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:27:05