我想写一个矩阵,矩阵的大小由变量决定,同时,想写一个遍历函数,让矩阵中每行相乘。
DeviceList = []
DeviceList =[1, 2 , 3]
FuzzyMatrix = np.empty(np.empty(((len(DeviceList), len(DeviceList))))
for i in range(1, len(FuzzyMatrix)+1):
score = []
a = FuzzyMatrix[i][0]*FuzzyMatrix[i][1]*FuzzyMatrix[i][2]
score.append(a)
现在如果我把DeviceList大小变化,比如增加一个数据。那么 我算 a 的乘积也要变化,有没有一种方法比较灵活。让算a那个同行的乘积会随着DeviceList大小自动变化呢?
import numpy as np
n = 3
m = np.zeros((n, n))
# assign values to m:
for i in range(n):
for j in range(n):
m[i,j] = i+j*2
print(m)
score1 = []
score2 = []
for i in range(n):
score1.append(np.multiply.reduce(m[i,:])) # 同一行所有元素相乘
score2.append(np.multiply.reduce(m[:,i])) # 同一列所有元素相乘
print(score1)
print(score2)
你这每次都是生成的无限接近0的数
而且a = FuzzyMatrix[i][0]*FuzzyMatrix[i][1]*FuzzyMatrix[i][2]你这运算不会报错吗
使用for循环对ndarray对象显式地实施遍历,基本上都属于问题代码。计算各行或各列的积,应该使用prod函数。
import numpy as np
a = np.arange(12).reshape(3,4)
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.prod(a, axis=0) # 计算各列乘积
array([ 0, 45, 120, 231])
np.prod(a, axis=1) # 计算各行乘积
array([ 0, 840, 7920])
首先你这个数组下标,从1开始有问题吧?其次,你如果想要动态的增加,很简单,在第一个for里,再写一个for循环,然后累乘不就行了,像这样
for i in range(0,len(FuzzyMatrix)) #行长度
a=1
for j in range(0,len(FuzzyMatrix)) #列长度
a=a*FuzzyMatrix[i][j]
print(a) #输出每一行的乘积
有帮助的话采纳一下哦!
不知道你这个问题是否已经解决, 如果还没有解决的话: