Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NumPy:不正确地创建二维阵列_Python_Numpy - Fatal编程技术网

Python NumPy:不正确地创建二维阵列

Python NumPy:不正确地创建二维阵列,python,numpy,Python,Numpy,我正在读取数据,试图创建一个194,1形状的NumPy数组。所以它应该看起来像:[[4],[0],[9],…] 我正在这样做: def parse_data(file_name): data = [] target = [] with open(file_name) as f: for line in f: temp = line.split() x = [float(x) for x in temp[:2]

我正在读取数据,试图创建一个194,1形状的NumPy数组。所以它应该看起来像:[[4],[0],[9],…]

我正在这样做:

def parse_data(file_name):
    data = []
    target = []
    with open(file_name) as f:
        for line in f:
            temp = line.split()
            x = [float(x) for x in temp[:2]]
            y = float(temp[2])
            data.append(np.array(x))
            target.append(np.array(y))
    return np.array(data), np.array(target)

x, y = parse_data("data.txt")
当我检查y形时,它是194,而不是我预期的194,1

然而,x的形状是194,2,正如我所预料的那样

知道我做错了什么吗

谢谢

在从标量构建的numpy数组列表上调用np.array时,它会将它们连接起来,然后创建一个numpy数组,给出194的形状

您始终可以将y重塑为所需的形状:

def parse_data(file_name):
    data = []
    target = []
    with open(file_name) as f:
        for line in f:
            temp = line.split()
            x = [float(x) for x in temp[:2]]
            y = float(temp[2])
            data.append(np.array(x))
            target.append(y)
    return np.array(data), np.array(target).reshape(-1, 1)

x, y = parse_data("data.txt")
当然,您也可以通过以下方法解决问题:

target.append(np.array([y]))
上述行为的一个例子:

import numpy as np
a = np.array(5)
b = np.array(4)
v = [a, b]
v
>>>[array(5), array(4)]
np.array(v)
>>>array(5, 4) #arrays are concatenated
当在由标量构建的numpy数组列表上调用np.array时,它会连接这些数组,然后创建一个numpy数组,给出194的形状

您始终可以将y重塑为所需的形状:

def parse_data(file_name):
    data = []
    target = []
    with open(file_name) as f:
        for line in f:
            temp = line.split()
            x = [float(x) for x in temp[:2]]
            y = float(temp[2])
            data.append(np.array(x))
            target.append(y)
    return np.array(data), np.array(target).reshape(-1, 1)

x, y = parse_data("data.txt")
当然,您也可以通过以下方法解决问题:

target.append(np.array([y]))
上述行为的一个例子:

import numpy as np
a = np.array(5)
b = np.array(4)
v = [a, b]
v
>>>[array(5), array(4)]
np.array(v)
>>>array(5, 4) #arrays are concatenated
您似乎期望np.arrayy自动将标量y转换为1元素行。那不是NumPy的工作方式

np.arrayy是0维的。将一组数据放在一个列表中,并在列表上调用数组将生成一维结果,而不是二维结果。

您似乎期望np.arrayy自动将标量y转换为一个1元素行。那不是NumPy的工作方式

np.arrayy是0维的。将一组数据放在一个列表中,并在列表上调用数组,将生成一维结果,而不是二维结果。

在迭代过程中,我将跳过np.array

def parse_data(file_name):
    data = []
    target = []
    with open(file_name) as f:
        for line in f:
            temp = line.split()
            x = [float(x) for x in temp[:2]]
            y = float(temp[2])
            data.append(x)
            target.append(y)
    return np.array(data), np.array(target)
这将创建如下数据:

和目标一样

然后,np.arraydata将列表列表转换为二维数组,将数字列表转换为一维数组

然后可以很容易地对1d进行重塑或添加尺寸标注,使其成为1、n或n、1或任何您需要的尺寸

请记住,基本阵列构造方法有:

np.array([1,2,3])             # 1d
np.array([[1,2],[3,4]])       # 2d
我会跳过迭代中的np.array

def parse_data(file_name):
    data = []
    target = []
    with open(file_name) as f:
        for line in f:
            temp = line.split()
            x = [float(x) for x in temp[:2]]
            y = float(temp[2])
            data.append(x)
            target.append(y)
    return np.array(data), np.array(target)
这将创建如下数据:

和目标一样

然后,np.arraydata将列表列表转换为二维数组,将数字列表转换为一维数组

然后可以很容易地对1d进行重塑或添加尺寸标注,使其成为1、n或n、1或任何您需要的尺寸

请记住,基本阵列构造方法有:

np.array([1,2,3])             # 1d
np.array([[1,2],[3,4]])       # 2d

你能提供data.txt中的一些行吗?你能提供data.txt中的一些行吗?返回np.arraydata,np.arraytarget.reforme-1,1可能更好,以防数据量变化。我认为它应该是-1,1,而不是1,-1。你也可以使用return np.arraydata,np.vstacktarget更简洁,只要目标是1D就可以工作。返回np.arraydata,np.arraytarget.reformate-1,1可能更好,以防数据量变化。我认为它应该是-1,1,而不是-1。您也可以使用return np.arraydata,np.vstacktarget更简洁,只要目标是1D就可以工作。