我是Python(以前的Matlab用户)的新手。
我有阵列
y_pred = [None] * 128
test_idx
是一个indeces数组
array([ 3, 4, 5, 19, 28, 30, 38, 39, 47, 49, 50, 51, 54,
64, 74, 81, 84, 85, 90, 91, 93, 97, 102, 103, 106, 107,
109, 111, 115, 121], dtype=int64)
我想用数组results
array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0])
如果我尝试
y_pred[test_idx] = results
我收到错误: TypeError:只有一个元素的整数数组可以转换为索引
答案 0 :(得分:1)
您的y_pred
是一个原生Python列表,除了整数之外,您不能将其编入索引。你应该把它创建为一个numpy数组。
尝试按以下方式初始化:
import numpy as np
y_pred = np.array([None] * 128)
答案 1 :(得分:1)
我看到你在这里做了很多matlab;)
如果你想以pythonic方式做到这一点!你需要循环。 像:
for index, value in zip(test_idx, results):
y_pred[index] = value
答案 2 :(得分:0)
for i in xrange(len(test_idx)):
y_pred[test_idx[i]] = results[i]
或:
for key, val in zip(test_idx, results):
y_pred[key] = val
我假设你的两个名单都有相同的长度。
答案 3 :(得分:0)
简短版本:将y_pred = [None] * 128
替换为y_pred = np.full(128, np.NaN)
。一旦你这样做,其他一切都会奏效。
长版:
其他人所说的问题是,y_pred
是一个列表,而不是一个数组。列表不支持一次获取或设置多个索引,您需要使用numpy数组。
你想要的最简单方法是使用一个叫做“sentinel”值的numpy数组,这个值表示那里没有写任何东西。这个值最明显的选择可能是0
或NaN
,但是根据你想要对结果做什么,它可能就是任何事情。 NaN
是数字numpy数组None
的壁橱,但0
可以使稍后的计算变得更容易(例如NaN != NaN
,你需要使用np.isnan
1}}以便稍后识别NaN
值。
要使用零执行此操作,您可以将y_pred = [None] * 128
替换为y_pred = np.zeros(128)
。要使用NaN
(或任何其他值),您可以使用y_pred = np.full(128, np.NaN)
(还有一个np.ones
,但我认为它不会对您有所帮助)。然后可以按原样使用其余代码。