首页 > 解决方案 > 为什么我会收到以下错误?Valueerror:使用序列设置数组元素

问题描述

我想输出一个列表,其中每个元素都是一个字符串。为什么我会收到以下错误?

hhh[i,j]=['Ok']

ValueError:使用序列设置数组元素。

yyyy=np.asarray([[ 52.187,  39.141,  26.094],
   [ 57.164,  42.874,  28.583],
   [ 71.619,  53.716,  35.811],
   [ 21.565,  16.174,  10.783],
   [ 67.592,  50.694,  33.796],
   [109.85 ,  82.39 ,  54.928]])
hhh=np.zeros((6,3))
print(hhh)    


for i in range(0,6): 
    for j in range(0,3):
        if yyyy[i,j]<= 100:
            hhh[i,j]=['Ok']
        else:
            hhh[i,j]=['No'] 

我的预期结果是获得“Ok”或“No”的列表 hhh[6,3]

标签: pythonlistnumpy

解决方案


鉴于你正在使用NumPy,你有np.where这个:

np.where(yyyy<=100, 'OK', 'NO')

array([['OK', 'OK', 'OK'],
       ['OK', 'OK', 'OK'],
       ['OK', 'OK', 'OK'],
       ['OK', 'OK', 'OK'],
       ['OK', 'OK', 'OK'],
       ['NO', 'OK', 'OK']], dtype='<U2')

如果您想要一个列表,只需添加, .tolist,np.where(yyyy<=100, 'OK', 'NO').tolist()


请注意,由于默认情况下np.zeros会创建一个ndarrayof ,因此您会收到一个错误dtype('float64')。相反,您可以定义一个与和 withnp.empty具有相同形状的 ndarray ,即长度为unicode 的字符串:yyyydtype('<U2')2

hhh = np.empty(shape=yyyy.shape, dtype='U2')

for i in range(0,6): 
    for j in range(0,3):
        if yyyy[i,j]<= 100:
            hhh[i,j]='Ok'
        else:
            hhh[i,j]='No'

推荐阅读