Arrays Numpy:将项附加到类似矩阵的数组
我以前用R编写代码,现在试图找到进入python的方法。我大部分时间都在使用列表,但现在我需要用numpy完成一些事情。不知何故,与R相比,它的工作方式似乎大不相同。大多数时候,我遇到了从不同形状广播输入阵列的问题。也许如果我能找出下面代码中的错误,我就能更好地理解numpy试图做什么,以及如何处理数组的某些部分Arrays Numpy:将项附加到类似矩阵的数组,arrays,python-2.7,numpy,Arrays,Python 2.7,Numpy,我以前用R编写代码,现在试图找到进入python的方法。我大部分时间都在使用列表,但现在我需要用numpy完成一些事情。不知何故,与R相比,它的工作方式似乎大不相同。大多数时候,我遇到了从不同形状广播输入阵列的问题。也许如果我能找出下面代码中的错误,我就能更好地理解numpy试图做什么,以及如何处理数组的某些部分 import numpy as np a = np.array((1,2,3,4)) b = np.array((2,4,6,8)) c = np.array((3,6,9,12))
import numpy as np
a = np.array((1,2,3,4))
b = np.array((2,4,6,8))
c = np.array((3,6,9,12))
myArray = np.asarray((a,b,c))
现在我想在myArray的每一行后面加上它的平均值。我试过这个:
for i in range(myArray.shape[0]):
myArray[i] = np.append(myArray[i,:], np.mean(myArray[i,:]))
我得到“无法将输入数组从形状(5)广播到形状(4)。我想,它试图将新项压缩到大小为4的旧数组中,而我想附加它。我该怎么做
我期望的输出如下所示:
[In] print myArray
[Out] [[1.0 2.0 3.0 4.0 2.5]
[2.0, 4.0, 6.0, 8.0, 5.0]
[3.0, 6.0, 9.0, 12.0, 7.5]]
使用获取跨行的平均值,然后将这些值与输入数组一起堆叠为两个“柱状块”,如下所示-
np.column_stack((myArray,myArray.mean(1)))
要在循环中执行此操作,需要初始化和存储,如下所示-
m,n = myArray.shape # Get shape of input array
# Define output array with same rows as input, but one more column in it
myArrayOut = np.zeros((m,n+1))
for i in range(myArray.shape[0]):
# Store each row alongwith its mean as the last element
myArrayOut[i] = np.append(myArray[i,:], np.mean(myArray[i,:]))
使用获取跨行的平均值,然后将这些值与输入数组一起堆叠为两个“柱状块”,如下所示-
np.column_stack((myArray,myArray.mean(1)))
要在循环中执行此操作,需要初始化和存储,如下所示-
m,n = myArray.shape # Get shape of input array
# Define output array with same rows as input, but one more column in it
myArrayOut = np.zeros((m,n+1))
for i in range(myArray.shape[0]):
# Store each row alongwith its mean as the last element
myArrayOut[i] = np.append(myArray[i,:], np.mean(myArray[i,:]))
我更新了问题并添加了所需的输出。列\u堆栈看起来很棒,但您也可以在循环中应用它吗?我可能必须为这些数组添加不同的值更新:好的,我计算了一个列表“d”“它包含所有所需的值,而不是列堆栈myArray和d。这是可行的,但我必须为每个要附加的项创建一个新列表。也许有更简单的方法吗?@offeltoffel那么,您是在寻找数组列表还是单个数组作为输出?单个数组输出将是最方便的。“初始化和存储”的想法很好,因为我总是知道最终数组的大小,所以我可以提前创建它,然后用堆叠或附加的值填充它。谢谢@offeltoffel这将取决于实际用例,但对于性能(这就是为什么人们会选择NumPy),我会选择矢量化方法。请注意这一点。我更新了问题并添加了所需的输出。列_堆栈看起来很棒,但您也可以在循环中应用它吗?我可能需要向这些数组添加不同的值来更新:好的,我计算了一个列表“d”,其中包含所有需要的值,而不是列堆栈myArray和d。这是可行的,但我必须为每个要附加的项创建一个新列表。也许有更简单的方法吗?@offeltoffel那么,您是在寻找数组列表还是单个数组作为输出?单个数组输出将是最方便的。“初始化和存储”的想法很好,因为我总是知道最终数组的大小,所以我可以提前创建它,然后用堆叠或附加的值填充它。谢谢@offeltoffel这将取决于实际用例,但对于性能(这就是为什么人们会选择NumPy),我会选择矢量化方法。请注意这一点。