我有两个矩阵image
和convolved
。卷积中的某些元素必须替换为字符串“ x”。对应于“ x”值的索引是出现在图像矩阵中的那些索引。
这是我的矩阵,
import numpy as np
image = np.array([[0, 1, 0, 1, 0], [0, 0, 0, 1, 1],[0, 0, 0, 0, 0]])
convolved = np.array([[1., 1., 3., 3., 3.],[1., 1., 3., 3., 3.],[0., 0., 1., 2., 2.]])
这是我写的,
for m, i in enumerate(image):
for n, j in enumerate(i):
if j == 1:
#print(n,j)
convolved[m][n] = "x"
print(convolved)
运行此命令时,出现以下错误,
ValueError: could not convert string to float: 'x'
我想要这个输出;
array([[1., 'x', 3., 'x', 3.],
[1., 1., 3., 'x', 'x'],
[0., 0., 1., 2., 2.]])
有人可以告诉我我做错了什么吗? 谢谢。
答案 0 :(得分:2)
您正试图给np.array一个char值。您正在混合数据类型。这将不起作用,因为np.array需要类型为number的数据。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html
要么使用唯一数字而不是“ x”(例如-1),要么将整个数组更改为chars(例如numpy.chararray)。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.chararray.html
答案 1 :(得分:1)
您可以尝试使用pandas
:
import pandas as pd
image = pd.DataFrame([[0, 1, 0, 1, 0], [0, 0, 0, 1, 1],[0, 0, 0, 0, 0]])
convolved = pd.DataFrame([[1., 1., 3., 3., 3.],[1., 1., 3., 3., 3.],[0., 0., 1., 2., 2.]])
for i in image:
for j in image[i]:
if image[i][j] == 1:
convolved[i][j] = "x"
print(convolved)