鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2024-10-28 15:10:31 | 显示全部楼层
FishC 发表于 2024-10-28 15:08
抱歉遇到这个问题。请尝试以下步骤:

1. **清理环境**:

怎么确保python和numpy版本兼容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 15:10:44 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 15:10
怎么确保python和numpy版本兼容


要确保Python和NumPy版本的兼容性,请遵循以下步骤:

1. **查看当前版本**:
   - 使用以下命令检查当前Python和NumPy的版本:
   
python --version
     python -c "import numpy as np; print(np.__version__)"

2. **查阅兼容性信息**:
   - 前往NumPy的官方网站或其GitHub页面,查阅发布说明(Release Notes)查看每个版本的Python兼容性。

3. **推荐使用Conda**:
   - Conda会自动下载兼容的NumPy版本。可以使用以下命令安装:
   
conda install numpy

4. **常见推荐版本组合**:
   - Python 3.7、3.8、3.9 一般兼容 NumPy 1.20 到 1.22。
   - Python 3.10 以上要求较新版本的NumPy。

5. **升级版本**:
   - 如果发现不兼容,升级或降级至兼容的版本:
   
pip install numpy --upgrade
     # 或者如果需要指定版本
     pip install numpy==<version>

确保在创建和使用虚拟环境时,版本选择正确且依赖关系清晰。

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:23:53 | 显示全部楼层
对于[[0,0],[0,1],[[1,0],[1,1]]和[[0],[1],[1],[0]]两个array,我要怎么拼接成这个:
[[0,0], [0]],[[0,1], [1]],[[1,0], [1]],[[1,1], [0]]
@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-10-28 20:26:30 | 显示全部楼层
FishC 发表于 2024-10-28 15:10
要确保Python和NumPy版本的兼容性,请遵循以下步骤:

1. **查看当前版本**:


对于[[0,0],[0,1],[[1,0],[1,1]]和[[0],[1],[1],[0]]两个array,我要怎么拼接成这个:
[[0,0], [0]],[[0,1], [1]],[[1,0], [1]],[[1,1], [0]]
@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 20:26:38 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:26
对于[,,[,]和[,,,]两个array,我要怎么拼接成这个:
...


你可以使用Python中的`zip`函数来实现拼接。下面是一个示例代码:
import numpy as np

array1 = [[0,0],[0,1],[1,0],[1,1]]
array2 = [[0],[1],[1],[0]]

result = [list(i) for i in zip(array1, array2)]
print(result)

这种方法将`array1`和`array2`中的元素组合成一个新的列表。输出结果即为:
[[[0, 0], [0]], [[0, 1], [1]], [[1, 0], [1]], [[1, 1], [0]]]

希望对你有帮助!

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:38:49 | 显示全部楼层
FishC 发表于 2024-10-28 20:26
你可以使用Python中的`zip`函数来实现拼接。下面是一个示例代码:

TypeError: object of type 'numpy.int64' has no len()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-10-28 20:43:53 | 显示全部楼层
FishC 发表于 2024-10-28 20:26
你可以使用Python中的`zip`函数来实现拼接。下面是一个示例代码:

为什么我zip之后的输出里有一个array
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 20:44:02 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:23
对于[,,[,]和[,,,]两个array,我要怎么拼接成这个:
...


要将这两个数组拼接成目标格式,你可以使用NumPy库。以下是示例代码:
import numpy as np

# 初始化两个数组
array1 = [[0, 0], [0, 1], [1, 0], [1, 1]]
array2 = [[0], [1], [1], [0]]

# 将数组转换为NumPy数组
arr1 = np.array(array1)
arr2 = np.array(array2)

# 拼接数组
result = np.hstack((arr1, arr2))

# 打印结果
print(result.tolist())

这样你就可以得到 `[[[0,0],[0]],[[0,1],[1]],[[1,0],[1]],[[1,1],[0]]]`。

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:46:20 | 显示全部楼层
FishC 发表于 2024-10-28 20:44
要将这两个数组拼接成目标格式,你可以使用NumPy库。以下是示例代码:

x = df1.iloc[:, :-1]
y = df1.iloc[:, -1]
# 划分训练集测试集
cut = 50  # 取最后cut=30天为测试集
x_train, x_test = x.iloc[:-cut], x.iloc[-cut:]  # 列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列
y_train,y_test = y.iloc[:-cut], y.iloc[-cut:]
x_train_array = np.array(x_train)
y_train_array = np.array(y_train)

pat = [list(i) for i in zip(x_train_array,y_train_array)]
print(pat)
我这样输出的结果里有一个array(),但我不想要这个东西,怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-10-28 20:50:34 | 显示全部楼层
FishC 发表于 2024-10-28 20:44
要将这两个数组拼接成目标格式,你可以使用NumPy库。以下是示例代码:

x = df1.iloc[:, :-1]
y = df1.iloc[:, -1]
# 划分训练集测试集
cut = 50  # 取最后cut=30天为测试集
x_train, x_test = x.iloc[:-cut], x.iloc[-cut:]  # 列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列
y_train,y_test = y.iloc[:-cut], y.iloc[-cut:]
x_train_array = np.array(x_train)
y_train_array = np.array(y_train)

pat = [list(i) for i in zip(x_train_array,y_train_array)]
print(pat)
我这样输出的结果是[array([5. , 2.3, 3.3, 1. ]), 1],有一个array(),但我不想要这个东西,怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 20:50:40 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:38
TypeError: object of type 'numpy.int64' has no len ...


这个错误表明尝试对整数对象使用 `len()` 函数。以下是如何解决这个问题并拼接数组的方法:

假设 `array1` 和 `array2` 是 NumPy 数组:
import numpy as np

array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 使用np.hstack进行水平拼接
result = np.hstack((array1, array2))

print(result)

这样就可以将数组拼接成你想要的结果。如果你希望是其他格式,请详细说明。

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

使用道具 举报

发表于 2024-10-28 20:51:00 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:43
为什么我zip之后的输出里有一个array


`zip`函数返回的是一个迭代器,所以直接转换成列表时,里面会有元组的形式。由于你想得到的是一个嵌套列表的形式,可以使用列表推导式来实现。试试以下代码:
import numpy as np

array1 = [1, 2, 3, 4]
array2 = [5, 6, 7, 8]

result = [list(pair) for pair in zip(array1, array2)]
print(result)

这样会输出:
[[1, 5], [2, 6], [3, 7], [4, 8]]

这个方法通过将每个`zip`生成的元组转换成列表,以得到最终的嵌套列表格式。

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

使用道具 举报

发表于 2024-10-28 20:51:18 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:38
TypeError: object of type 'numpy.int64' has no len ...


这个错误提示表示你的代码尝试对一个整数类型数据调用 `len()` 函数。请确保处理的是数组而不是单个元素。

举个例子,假设我们有两个数组 `array1` 和 `array2`,我们希望将它们拼接成对应格式:
import numpy as np

# 示例数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 使用 zip 将两个数组的元素配对并转换为列表
result = np.array(list(zip(array1, array2)))

print(result)

### 输出:
[[1 4]
 [2 5]
 [3 6]]

确保在使用 `zip` 时,你正在处理的是数组而不是数字。如果 `array1` 和 `array2` 本身就是多维数组,需根据实际需求调整代码。

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:51:20 | 显示全部楼层
x = df1.iloc[:, :-1]
y = df1.iloc[:, -1]
# 划分训练集测试集
cut = 50  # 取最后cut=30天为测试集
x_train, x_test = x.iloc[:-cut], x.iloc[-cut:]  # 列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列
y_train,y_test = y.iloc[:-cut], y.iloc[-cut:]
x_train_array = np.array(x_train)
y_train_array = np.array(y_train)

pat = [list(i) for i in zip(x_train_array,y_train_array)]
print(pat)
我这样输出的结果是[array([5. , 2.3, 3.3, 1. ]), 1],有一个array(),但我不想要这个东西,怎么办
@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 20:51:54 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:50
x = df1.iloc
y = df1.iloc
# 划分训练集测试集
cu ...


你所看到的`array()`输出,可能是由于`pat`变量的构建方式不正确而导致的。`pat`可能是在通过某种方式从`x_train_array`和`y_train_array`构造而来,但具体原因和`pat`的定义有关。

从你的代码中无法看到`pat`是如何构建的,因此以下是一些调整和检查的建议:

1. **检查构建过程**: 确定`pat`是如何被构建的,并确保构建过程中没有不必要的数组封装。

2. **正确拼接数组**: 如果`pat`是需要将`x_train_array`和`y_train_array`拼接在一起,可以使用NumPy的拼接函数,比如`np.hstack()`或`np.concatenate()`。

3. **调整内容输出**: 如果`pat`中包含不必要的数组部分,可能需要通过列表解析或其他处理方式去除。确保在构建`pat`时,直接使用你需要的数据格式。

如果能看到关于`pat`构建的更多细节,能够提供更具体的建议。如果有更多信息需要处理,请提供两个数据的示例。

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

使用道具 举报

发表于 2024-10-28 20:53:12 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:38
TypeError: object of type 'numpy.int64' has no len ...


这个错误通常是因为尝试对一个整数对象调用 `len()` 函数。以下是避免此错误的步骤:

1. **确保输入是可迭代的**:检查变量是否为列表或数组,而不是单个数值。

2. **处理拼接**:可以使用 NumPy 的 `np.column_stack` 或 `np.hstack` 来正确拼接。

### 示例代码:
import numpy as np

# 示例数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 拼接
result = np.column_stack((array1, array2))

print(result)

确保你的数组是正确的 NumPy 数组或列表,这样可以避免 `len()` 错误。

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

使用道具 举报

发表于 2024-10-28 20:53:16 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:43
为什么我zip之后的输出里有一个array


`zip`函数会将多个可迭代对象(一)一地组合在一起。如果你希望结果形式为 `[[], [], [], []]`,需要将其转换为列表。你可以试试以下代码:
import numpy as np

array1 = [1, 2, 3]
array2 = [4, 5, 6]

result = [list(a) for a in zip(array1, array2)]
print(result)

这样,`zip`函数会将 `array1` 和 `array2` 的元素配对成元组,并通过列表推导式转换成列表。

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

使用道具 举报

发表于 2024-10-28 20:53:23 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:46
x = df1.iloc
y = df1.iloc
# 划分训练集测试集
cu ...


要移除输出中的 `array()`,你可以将 NumPy 数组转换为列表。这样打印结果时会直接显示为列表格式而不是数组格式。请尝试以下方法:
# 将 NumPy 数组转换为列表
x_train_list = x_train_array.tolist()
y_train_list = y_train_array.tolist()

# 打印结果
pat = list(zip(x_train_list, y_train_list))
print(pat)

使用 `tolist()` 方法可以将 NumPy 数组转换为 Python 列表,然后再使用 `zip()` 函数组合两个列表。这样打印的输出将不会包含 `array()`。

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

使用道具 举报

发表于 2024-10-28 20:53:45 | 显示全部楼层
ShuviDoura 发表于 2024-10-28 20:51
x = df1.iloc
y = df1.iloc
# 划分训练集测试集
cu ...


您可以使用`tolist()`方法将NumPy数组转换为普通列表。修改后的代码如下:
import numpy as np

pat = [list(i) for i in zip(x_train_array, y_train_array)]
pat = [[list(x), y] for x, y in zip(x_train_array, y_train_array)]
print(pat)

这样`array([5. , 2.3, 3.3, 1. ])`会被转换为普通列表`[5.0, 2.3, 3.3, 1.0]`。

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:58:09 | 显示全部楼层
FishC 发表于 2024-10-28 20:53
您可以使用`tolist()`方法将NumPy数组转换为普通列表。修改后的代码如下:

Traceback (most recent call last):
  File "C:\Users\shiro\Desktop\bpnn-master\test.py", line 44, in <module>
    n.train(pat)
  File "C:\Users\shiro\Desktop\bpnn-master\bpnn.py", line 131, in train
    error = error + self.update(targets, N, M)
  File "C:\Users\shiro\Desktop\bpnn-master\bpnn.py", line 100, in update
    if len(targets) != self.no:
TypeError: object of type 'numpy.int64' has no len()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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