如何将行列表转换为列列表

问题描述 投票:0回答:2

你怎么转换[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
python numpy
2个回答
1
投票

在numpy中向向量添加维度很容易。您可以选择多种选项,具体取决于您要执行的操作:

  1. 在你的索引中使用np.newaxis,经常别名的Nonev = v[:, None] 要么 v = [None, :] 使用newaxis可以精确控制向量是变为列还是行。
  2. 重塑矢量: v = v.reshape((1, -1)) 要么 v = np.reshape(v, (-1, 1)) 我在这里确实展示了四个选项(np.reshape vs np.ndarray.reshape和row vs column)。在新向量的维度中使用-1意味着“无论什么大小都必须使它与原始元素的元素数量相同”。它比明确使用形状容易得多。
  3. 使用np.expand_dims,几乎完全等同于np.newaxis,但功能形式。
  4. 使用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


-3
投票

评论中的那些不适合我,但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

© www.soinside.com 2019 - 2024. All rights reserved.