鱼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
回复

使用道具 举报

 楼主| 发表于 2024-11-27 19:29:58 | 显示全部楼层
FishC 发表于 2024-11-13 20:43
当然!我会尝试帮你改正代码中的错误:

1. `test()` 函数中生成的 `vector1` 和 `vector2` 应该包含 ...

给我写一个代码,可以把图片转换成像素点的值然后保存到excel里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-27 19:30:16 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:29
给我写一个代码,可以把图片转换成像素点的值然后保存 ...


可以使用 Python 的 `PIL` 库来打开图像,`numpy` 库将图像转换为数组,并使用 `pandas` 库将这些数据存储到 Excel 文件中。以下是一个示例:
from PIL import Image
import numpy as np
import pandas as pd

# 打开图片
image_path = 'path_to_image.jpg'
image = Image.open(image_path)

# 将图片转换为灰度图像并转为数组
image = image.convert('L')
image_array = np.array(image)

# 将像素数据保存到DataFrame
df = pd.DataFrame(image_array)

# 将DataFrame保存到Excel文件
excel_path = 'output.xlsx'
df.to_excel(excel_path, index=False)

print(f"图片像素数据已保存到 {excel_path}")

确保你已经安装了所需的库:`PIL`(可以通过 `pillow` 安装),`numpy` 和 `pandas`。你可以使用以下命令安装它们:
pip install pillow numpy pandas

根据图片的大小,Excel 文件可能会很大,因为每个像素都有相应的值。 你可以把图像的路径 `path_to_image.jpg` 和 Excel 文件的路径 `output.xlsx` 更改为你所需的路径。

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

使用道具 举报

 楼主| 发表于 2024-11-27 19:52:59 | 显示全部楼层
FishC 发表于 2024-11-27 19:30
可以使用 Python 的 `PIL` 库来打开图像,`numpy` 库将图像转换为数组,并使用 `pandas` 库将这些数据 ...

使用mean_R = np.mean(R),我想让这个矩阵所有的数乘上100,我该怎么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-27 19:54:50 | 显示全部楼层
FishC 发表于 2024-11-27 19:30
可以使用 Python 的 `PIL` 库来打开图像,`numpy` 库将图像转换为数组,并使用 `pandas` 库将这些数据 ...

使用mean_R = np.mean(R),我想让这个矩阵所有的数乘上100,我该怎么写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-27 19:56:08 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:54
使用mean_R = np.mean(R),我想让这个矩阵所有的数乘 ...


要让整个矩阵(或者说数组)的所有元素乘以100,你可以简单地使用 NumPy 的运算功能。假设 `R` 是你的矩阵,那么你只需要以下简单的一行代码:
R = R * 100

在这行代码中,`R` 矩阵的所有元素都会乘以100。NumPy 支持这种对整个数组进行逐元素操作的功能。

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

使用道具 举报

 楼主| 发表于 2024-11-27 19:57:00 | 显示全部楼层
FishC 发表于 2024-11-27 19:56
要让整个矩阵(或者说数组)的所有元素乘以100,你可以简单地使用 NumPy 的运算功能。假设 `R` 是你的 ...

mean_R = np.mean(R)和np.(R)有什么区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-27 19:58:51 | 显示全部楼层
FishC 发表于 2024-11-27 19:56
要让整个矩阵(或者说数组)的所有元素乘以100,你可以简单地使用 NumPy 的运算功能。假设 `R` 是你的 ...

我是用这个代码分离三色通道之后(B, G, R) = cv2.split(image)
如何得到三个通道对应的矩阵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-27 20:01:02 | 显示全部楼层
FishC 发表于 2024-11-27 19:56
要让整个矩阵(或者说数组)的所有元素乘以100,你可以简单地使用 NumPy 的运算功能。假设 `R` 是你的 ...

我是用这个代码分离三色通道之后(B, G, R) = cv2.split(image)
如何得到三个通道对应的矩阵
@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-27 20:02:14 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 20:01
我是用这个代码分离三色通道之后(B, G, R) = cv2.spli ...


你已经成功地使用 `cv2.split(image)` 分离了三色通道。现在,`B`、`G`、`R` 分别就是这三个通道对应的矩阵。如果你想查看或使用这些矩阵,可以直接访问它们。

以下是如何打印出这些矩阵的例子:
print("Blue Channel Matrix:\n", B)
print("Green Channel Matrix:\n", G)
print("Red Channel Matrix:\n", R)

通过上述代码,你可以看到每个通道矩阵的值。

里面的每一个数字代表该图像在这个颜色通道上的像素强度。

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

使用道具 举报

 楼主| 发表于 2024-11-27 20:03:35 | 显示全部楼层
FishC 发表于 2024-11-27 20:02
你已经成功地使用 `cv2.split(image)` 分离了三色通道。现在,`B`、`G`、`R` 分别就是这三个通道对应的 ...

我要把它转化为np矩阵,但是np.B会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-27 20:04:13 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:52
使用mean_R = np.mean(R),我想让这个矩阵所有的数乘 ...


要让一个矩阵中的所有元素乘以 100,可以直接对 NumPy 数组进行操作,如下所示:
import numpy as np

# 假设 R 是你的矩阵
R = np.array([...])

# 将矩阵中的所有元素乘以 100
R_scaled = R * 100

# 若需要计算均值
mean_R = np.mean(R_scaled)

这样,`R_scaled` 就是变化后的矩阵,而 `mean_R` 是其均值。

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

使用道具 举报

发表于 2024-11-27 20:04:19 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:52
使用mean_R = np.mean(R),我想让这个矩阵所有的数乘 ...


你可以直接对整个 NumPy 数组进行运算,将每个元素乘以 100。以下是你如何实现这一点:

mean_R = np.mean(R)
result = R * 100

以上代码将 `R` 中每个值乘以100,并保存在 `result` 中。如果你想立即更新 `R` 的值,也可以直接使用:

R *= 100

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

使用道具 举报

发表于 2024-11-27 20:04:53 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:57
mean_R = np.mean(R)和np.(R)有什么区别


`mean_R = np.mean(R)` 和 `np.(R)` 是两种不同的 NumPy 操作,但由于后一种语法不完整,这里边我理解为你可能想问关于另一种常用操作。

1. **`mean_R = np.mean(R)`**:
   - 这是用来计算矩阵 R 的平均值(均值)的操作。
   - `np.mean()` 函数会将矩阵 R 中的所有元素的平均值计算出来,并赋给 `mean_R`。

2. **假设你想问 `R * 100`**:
   - 这会将矩阵 R 中的每个元素乘以100。
   - 这种操作会返回一个新矩阵,其中的值为每个原始值乘以100。

请确认您想问的具体操作,方便提供更准确的解释。

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

使用道具 举报

发表于 2024-11-27 20:05:04 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:58
我是用这个代码分离三色通道之后(B, G, R) = cv2.spli ...


使用 `cv2.split(image)` 分离图像的三个颜色通道后,你会得到三个独立的矩阵,分别对应于蓝色(B)、绿色(G)和红色(R)通道。你已经在代码中完成了这一分离操作,所以 `B`, `G`, `R` 这些变量就是对应的矩阵。

如果想要明确看到每个通道的矩阵,你只需要输出它们即可。例如:
print("Blue channel matrix:\n", B)
print("Green channel matrix:\n", G)
print("Red channel matrix:\n", R)

这样你就可以查看三个通道对应的矩阵。每个矩阵都是一个二维数组,包含图像在对应通道上的像素值。

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

使用道具 举报

发表于 2024-11-27 20:05:24 | 显示全部楼层
ShuviDoura 发表于 2024-11-27 19:57
mean_R = np.mean(R)和np.(R)有什么区别


`mean_R = np.mean(R)` 和 `np.(R)` 不可直接比较,因为 `np.(R)` 是不完整的语法。那么我们可以对比 `np.mean(R)` 和 NumPy 中其他常用函数的区别。

1. **np.mean(R)**:
   - 计算矩阵 `R` 所有元素的平均值,并返回一个单一的数值。

2. **R**:
   - 是一个 NumPy 数组或矩阵的对象,通常用来承载数据结构(例如,图片的像素值)。

如果你想对 `R` 上应用某种操作以生成其他结果,可能是使用了 NumPy 的其他函数,如:

- **np.sum(R)**:计算 `R` 中所有元素的总和。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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