gpt4 book ai didi

python - 错误 : Setting an array element with a sequence. Python/Numpy

转载 作者:太空狗 更新时间:2023-10-29 17:55:28 27 4
gpt4 key购买 nike

我在尝试将数组分配给另一个数组特定位置时收到此错误。在创建简单列表并进行此类分配之前,我正在这样做。但是 Numpy 比简单的列表更快,我现在正在尝试使用它。

问题是因为我有一个存储一些数据的 2D 数组,并且在我的代码中,例如,我要计算每个位置值的梯度,所以我创建了另一个 2D 数组,其中每个位置存储其梯度值(value)。

import numpy as np

cols = 2
rows = 3

# This works
matrix_a = []

for i in range(rows):
matrix_a.append([0.0] * cols)

print matrix_a
matrix_a[0][0] = np.matrix([[0], [0]])
print matrix_a

# This doesn't work
matrix_b = np.zeros((rows, cols))
print matrix_b

matrix_b[0, 0] = np.matrix([[0], [0]])

发生的事情是因为我有一个定义 np.zeros((rows, cols)) 对象的类,它存储有关某些数据的信息,例如简化图像数据。

class Data2D(object):
def __init__(self, rows=200, cols=300):
self.cols = cols
self.rows = rows
# The 2D data structure
self.data = np.zeros((rows, cols))

在特定方法中,我必须计算此数据的梯度,它是一个 2 x 2 矩阵(因此我想使用 ndarray,而不是简单的 array),为此,我创建了这个对象的另一个实例来存储这个新数据,其中每个点(像素)都应该存储它的梯度。我使用的是简单的列表,这很有效,但我认为我可以通过 numpy 获得一些性能。

有办法解决这个问题吗?或者更好的方法来做这样的事情?我知道我可以将数组类型定义为 object,但我不知道这样做是否会降低性能。

谢谢。

最佳答案

问题在于 matrix_b 默认为 float 数据类型。在我的机器上,检查

matrix_b.dtype

返回 dtype('float64')。要创建一个可以容纳任何东西的 numpy 数组,您可以手动将 dtype 设置为对象,这将允许您在其中放置一个矩阵:

matrix_b = np.zeros((rows, cols), dtype=object)
matrix_b[0, 0] = np.matrix([[0], [0], [1]])

关于python - 错误 : Setting an array element with a sequence. Python/Numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com