你怎么转换[1, 2, 3]
到[[1],[2],[3]]
在python?
另外,假设我有一个长度为m的向量,其值为1到10,我想创建一个大小为mx10的矩阵,这样就说如果向量y = 1
那么矩阵应该是[0,1,0,0,0,0,0,0,0,0]
。在八度音程中它是可能的,
y_train = zeros(m,output_layer_size);
for i=1:output_layer_size
y_train(find(y==i),i)=1;
end
但是类似的函数在python中给出了VisibleDeprecationWarning
警告并确实给出了所需的输出
y_train = np.zeros((y.shape[0],10))
for i in range(10):
y_train[y==i][i]=1
在numpy中向向量添加维度很容易。您可以选择多种选项,具体取决于您要执行的操作:
np.newaxis
,经常别名的None
:
v = v[:, None]
要么
v = [None, :]
使用newaxis
可以精确控制向量是变为列还是行。v = v.reshape((1, -1))
要么
v = np.reshape(v, (-1, 1))
我在这里确实展示了四个选项(np.reshape
vs np.ndarray.reshape
和row vs column)。在新向量的维度中使用-1
意味着“无论什么大小都必须使它与原始元素的元素数量相同”。它比明确使用形状容易得多。np.expand_dims
,几乎完全等同于np.newaxis
,但功能形式。ndmin=2
构造一个新数组:
v = np.array(v, copy=False, ndmin=2)
此方法灵活性最低,因为它不允许您控制新轴的位置。它通常用于唯一重要的是维度,广播负责其余部分。问题的第二部分似乎是一个简单的用例,用于Python中的花式索引。这里是IDEOne link,我在那里展开你的八度循环。您可以在Python中将其改写为:
y_train = np.zeros((y.size, m_output));
y_train[np.arange(y.size), y] = 1
这是演示的IDEOne link。
评论中的那些不适合我,但numpy.where()工作!
b=np.array([[0],[0],[2],[2],[4],[1],[6],[7],[5],[9]])
a=np.random.randint(10,size=(10,10))
for i in range(10):
c=np.zeros((1,10))
c[0][i]=1
a[np.where(b==i)[0]] = c
print a