鱼C论坛

 找回密码
 立即注册
楼主: ShuviDoura

[已解决]关于bp神经网络

[复制链接]
 楼主| 发表于 2024-11-13 20:39:15 | 显示全部楼层
FishC 发表于 2024-11-13 17:27
这个错误表明函数 `greycomatrix` 期望输入的是一个二维数组(即灰度图像),而你提供的可能不是。例如 ...

import math

def test():
    vector1 = [1,2,3]
    vector2 = [1, 2, 3]
    return vector1,vector2

def pearson(vector1, vector2):
    n = len(vector1)
    #simple sums
    sum1 = sum(float(vector1[i]) for i in range(n))
    sum2 = sum(float(vector2[i]) for i in range(n))
    #sum up the squares
    sum1_pow = sum([pow(v, 2.0) for v in vector1])
    sum2_pow = sum([pow(v, 2.0) for v in vector2])
    #sum up the products
    p_sum = sum([vector1[i]*vector2[i] for i in range(n)])
    #分子num,分母den
    num = p_sum - (sum1*sum2/n)
    den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
    if den == 0:
        return 0.0
    return num/den

if __name__=='__main__':
    a = pearson(test())
    print(a)

帮我修改一下错误@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-13 20:39:37 | 显示全部楼层
ShuviDoura 发表于 2024-11-13 20:39
import math

def test():
    vector1 =
    ve ...


在您的代码中,`pearson(test())` 的调用不正确,因为 `test()` 函数返回的是两个向量的元组 `(vector1, vector2)`,而 `pearson()` 函数期望有两个单独的向量作为参数。

我们需要修改调用 `pearson()` 的方式,具体如下:
import math

def test():
    vector1 = [1, 2, 3]
    vector2 = [1, 2, 3]
    return vector1, vector2

def pearson(vector1, vector2):
    n = len(vector1)
    # simple sums
    sum1 = sum(float(vector1[i]) for i in range(n))
    sum2 = sum(float(vector2[i]) for i in range(n))
    # sum up the squares
    sum1_pow = sum([pow(v, 2.0) for v in vector1])
    sum2_pow = sum([pow(v, 2.0) for v in vector2])
    # sum up the products
    p_sum = sum([vector1[i]*vector2[i] for i in range(n)])
    # 分子num,分母den
    num = p_sum - (sum1 * sum2 / n)
    den = math.sqrt((sum1_pow - pow(sum1, 2) / n) * (sum2_pow - pow(sum2, 2) / n))
    if den == 0:
        return 0.0
    return num / den

if __name__ == '__main__':
    vector1, vector2 = test()
    a = pearson(vector1, vector2)
    print(a)

这里我们在主程序中拆解了 `test()` 的输出,把它分配给 `vector1` 和 `vector2`,然后以这两个变量作为参数传递给 `pearson()` 函数。这样可以确保 `pearson()` 函数接收到正确的参数格式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-13 20:41:01 | 显示全部楼层
FishC 发表于 2024-11-13 20:39
在您的代码中,`pearson(test())` 的调用不正确,因为 `test()` 函数返回的是两个向量的元组 `(vector1 ...

那如果我想用a = pearson(test())去嵌套,我的def test()要怎么改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-13 20:42:18 | 显示全部楼层
ShuviDoura 发表于 2024-11-13 20:41
那如果我想用a = pearson(test())去嵌套,我的def t ...


为了使 `a = pearson(test())` 能够正常工作,可以让 `test()` 返回一个包含两个向量的元组,并确保在 `pearson()` 函数中按适当顺序解包该元组。下面是如何实现的:
import math

def test():
    # 示例数据,可以根据需要替换
    vector1 = [1.0, 2.0, 3.0, 4.0, 5.0]
    vector2 = [5.0, 6.0, 7.0, 8.0, 9.0]
    return vector1, vector2

def pearson(vectors):
    vector1, vector2 = vectors  # 解包元组
    n = len(vector1)
    # simple sums
    sum1 = sum(float(x) for x in vector1)
    sum2 = sum(float(x) for x in vector2)
    # sum up the squares
    sum1_pow = sum(pow(x, 2) for x in vector1)
    sum2_pow = sum(pow(x, 2) for x in vector2)
    # sum up the products
    p_sum = sum(x * y for x, y in zip(vector1, vector2))
    # 分子num,分母den
    num = p_sum - (sum1 * sum2 / n)
    den = math.sqrt((sum1_pow - pow(sum1, 2) / n) * (sum2_pow - pow(sum2, 2) / n))
    if den == 0:
        return 0.0
    return num / den

if __name__ == '__main__':
    a = pearson(test())
    print(a)

在这个示例中,`test()` 返回两个向量组成的元组,而 `pearson()` 函数解包这个元组为 `vector1` 和 `vector2` 以进行计算。这样,你就可以通过 `a = pearson(test())` 的嵌套调用获取到结果了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-13 20:43:08 | 显示全部楼层
ShuviDoura 发表于 2024-11-13 20:35
import math

def test():
    vector1 =
    ve ...


当然!我会尝试帮你改正代码中的错误:

1. `test()` 函数中生成的 `vector1` 和 `vector2` 应该包含具体的数字。
2. 在 `pearson()` 函数里,计算 `sum1` 和 `sum2` 时,`for` 循环中缺少了对向量元素的访问。
3. 另外,`sum1_pow` 和 `sum2_pow` 未被正确定义。

以下是修改后的代码:
import math

def test():
    vector1 = [1, 2, 3, 4, 5]
    vector2 = [2, 3, 4, 5, 6]
    return vector1, vector2

def pearson(vector1, vector2):
    n = len(vector1)
    # simple sums
    sum1 = sum(float(vector1[i]) for i in range(n))
    sum2 = sum(float(vector2[i]) for i in range(n))
    # sum up the squares
    sum1_pow = sum([pow(v, 2) for v in vector1])
    sum2_pow = sum([pow(v, 2) for v in vector2])
    # sum up the products
    p_sum = sum([vector1[i] * vector2[i] for i in range(n)])
    # 分子num,分母den
    num = p_sum - (sum1 * sum2 / n)
    den = math.sqrt((sum1_pow - pow(sum1, 2) / n) * (sum2_pow - pow(sum2, 2) / n))
    if den == 0:
        return 0.0
    return num / den

if __name__ == '__main__':
    vector1, vector2 = test()  # 展开返回值
    a = pearson(vector1, vector2)
    print(a)

### 修改要点:
- `vector1` 和 `vector2` 被定义为含有样本数据的列表。
- 计算 `sum1` 和 `sum2` 时,在生成器表达式中正确地访问向量元素。
- `sum1_pow` 和 `sum2_pow` 正确地计算向量元素的平方和。
- `test()` 函数在调用 `pearson()` 时,被展开成两个参数。

这段代码现在计算的是两个简单列表之间的Pearson相关系数。你可以根据情况修改 `vector1` 和 `vector2` 的值以适应你的应用场景。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表