【问题标题】:Array shape unable to get from the loop Python数组形状无法从循环 Python 中获取
【发布时间】:2020-12-31 02:31:05
【问题描述】:

试图构建一个包含两个数组的人工数据集。 X of shape (100,2) - 收入和年龄出现在两列中。 y 的形状 (100,1)

当附加循环时,我只得到 (200,1) 的 X。

没有错误,但输入模型的意图是生成 100x2 的 np 数组

感谢您的支持。

from scipy.stats import norm 
import random
from numpy import *
import numpy as np
from ast import literal_eval
from ast import literal_eval
from pandas import DataFrame


# Function for N points in k clusters to generate artificial data
def create_clustered_data(N,k):
    random.seed(10)
    points_per_cluster=float(N)/k
    X=np.array([])
    y=np.array([])
    for i in range(k):
        income_centroid=np.random.uniform(20000,200000)
        age_centroid=np.random.uniform(20,70)
        for j in range(int(points_per_cluster)):
             X=np.append(X,[np.random.normal(income_centroid,10000),np.random.normal(age_centroid,2)])
             y=np.append(y,i) 
             X=np.array(X)
             y=np.array(y)
    return X,y

(X,y)=create_clustered_data(100,5) # using the function to create two arrays

print(X[0:4]) # getting the income and age appending together in single dimension
X.shape # I need to get the shape as (100,2) instead of (200,1) currently being achieved
X.ndim # I need to get this as 2 instead of 1 currently being achieved 

【问题讨论】:

    标签: python arrays function loops append


    【解决方案1】:

    只需将您的 np.array 修改为标准 python 列表并使用 += 运算符将值附加到列表中。您还需要将您的记录括在方括号中[],请参阅[[np.random.normal(income_centroid, 10000), np.random.normal(age_centroid,2)]]

    # Function for N points in k clusters to generate artificial data
    def create_clustered_data(N,k):
        random.seed(10)
        points_per_cluster=float(N)/k
        X=[]
        y=[]
        for i in range(k):
            income_centroid=np.random.uniform(20000,200000)
            age_centroid=np.random.uniform(20,70)
            for j in range(int(points_per_cluster)):
                 X += [[np.random.normal(income_centroid, 10000), np.random.normal(age_centroid,2)]]
                 y += [i]
        return X, y
    
    (X,y) = create_clustered_data(100,5)
    X = np.array(X)
    y = np.array(y)
    

    在您转换 X = np.array(X) 之后, X.shape 将返回 (100, 2)

    【讨论】:

    • 谢谢。我得到了函数输出 X 所需的尺寸。但我需要将它以数组格式提供给散点图(当前作为列表)和 svm.SVC 模型。循环内的这两个语句正在抛出错误(TypeError:列表索引必须是整数或切片,而不是元组) X=np.array(X) y=np.array(y)
    • 谢谢。我得到了函数输出 X 所需的尺寸。但我需要将它以数组格式提供给散点图(当前作为列表)和 svm.SVC 模型。循环内的这两个语句正在抛出错误(TypeError:列表索引必须是整数或切片,而不是元组) X=np.array(X) y=np.array(y)
    • plt.figure(figsize=(8,6)) plt.scatter(X[:,0],X[:,1],c=y.astype(np.float)) plt.show() 错误消息TypeError Traceback (most recent call last) <ipython-input-124-82b40bdc9ac4> in <module> 1 plt.figure(figsize=(8,6)) 2 ----> 3 plt.scatter(X[:,0],X[:,1],c=y.astype(np.float)) 4 plt.show() TypeError: list indices must be integers or slices, not tuple <Figure size 576x432 with 0 Axes>
    • 什么意思?我在函数外尝试了plt.scatter(X[:,0],X[:,1],c=y.astype(np.float))(在将X 和y 转换为numpy 之后),它成功了。
    • 嗨,我正在将函数的输出提供给我需要一个数组的散点图,并且我需要该数组来提供 SVM 模型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多