尝试 np.where() 但"could not convert string to float"错误



我搜索了具有相同错误的主题,但没有发现真正类似于我的案例的内容。

char_list = ',~:;=≠!*#%$@'
def replace_char(matrix, char_list):
len_matrix = matrix.shape[0]
new_matrix = matrix.copy()
for i in range(len_matrix):
char = char_list[i * len(char_list) // len_matrix]
new_matrix[i] = np.where(new_matrix[i] == 1.0, char, " ")
return new_matrix

我有一个";3D数字矩阵";满1或0。我想用"1"代替1;char";取决于层的深度。在那之后,我使用这个功能

def crunch(matrix):
matrix_2D = matrix[0]
for i in range(matrix.shape[0]):
matrix_2D = np.where(matrix[i] != " ", matrix[i], matrix_2D)
return matrix_2D

这个函数运行得很好,但第一个函数给了我这个错误。

new_matrix[i] = np.where(new_matrix[i] == 1.0, char, " ")
ValueError: could not convert string to float: ''

如果我改变";char";以及";espace";char到";浮动";或";int";它运行良好。所以我寻找一种方法来转换";浮点矩阵";至";字符串矩阵";但没有什么能如我所愿。你可以看到,我的最终目标是用1在3D矩阵中通用项目,然后用ASCII打印它们,用它们的深度替换字符,最后压缩层来打印它。

感谢您的考虑

您需要测试问题行中的步骤

new_matrix[i] = np.where(new_matrix[i] == 1.0, char, " ")

首先,条件起作用:

new_matrix[i] == 1.0

那么where-记住这是一个函数。函数的所有参数在传入之前都会进行评估。

np.where(new_matrix[i] == 1.0, char, " ")

最后,作业有效吗?结果是什么?不要猜测,要核实。检查数据类型。

new_matrix[i] = ...

给定CCD_ 3和"1"的CCD_"参数,将返回一个字符串dtype数组。如果new_matrix是浮点型,这将产生错误。

In [76]: m = np.zeros(3)
In [80]: np.where(0,"#"," ")
Out[80]: array(' ', dtype='<U1')
In [81]: m[1] = np.where(0,"#"," ")
Traceback (most recent call last):
Input In [81] in <cell line: 1>
m[1] = np.where(0,"#"," ")
ValueError: could not convert string to float: ''

相关内容

最新更新