如何使用数组模块在python中获取数组的输入?

时间:2019-01-10 20:26:39

标签: python

因此,我是python的新手。以前,我曾经使用C语言进行编码,在那儿我广泛使用了数组,但是在python中,我们没有选择直接使用数组而不导入“ array”模块的选项。我最近了解了列表,但是我想在python中实现数组而不是列表。 在我的代码中,我尝试输入array(2d)的尺寸,然后输入其元素,然后进行打印。稍后,我计划输入另一个数组并将其与前一个数组相乘。  但是,每次我运行此代码时,都会收到一条错误消息:“数组索引超出范围”。 我很清楚这个错误,但是在这里我无法弄清楚什么是错误的。 请帮帮我。

这也是我关于堆栈溢出的第一个问题,所以如果我的问题框架错误,请原谅我。

import pandas as pd
import numpy as np
# Example data frame
df = pd.DataFrame({'start': ['2016-01-01 00:00:00', '2016-01-02 01:00:00', '2016-01-15 08:00:00', '2016-01-16 07:00:00'],
                   'end':   ['2016-01-02 00:00:00', '2016-01-03 00:00:00', '2016-01-16 07:00:00', '2016-01-16 07:00:00'],
                   'id': [0, 1, 0, 2],
                   'x': [200, 100, 15, 80]})
# Convert the strings in datetimes
df['start'] = pd.to_datetime(df['start'], format='%Y-%m-%d %H:%M:%S')
df['end']   = pd.to_datetime(df['end'], format='%Y-%m-%d %H:%M:%S')
# Get the date time offset
OFFSET = pd.datetime(2016, 1, 1, 0, 0, 0).timestamp() # this is the first date time I have
# Convert the dates in integers (conversion to nanoseconds and then to hours
df['start'] = ((df['start'].astype(np.int64)  / (1e9) - OFFSET) / 3600).astype(np.int32) - 1
df['end']   = ((df['end'].astype(np.int64)  / (1e9) - OFFSET) / 3600).astype(np.int32) - 1
# Target data structure
x = np.zeros((1000, 3)) # this must have a number of rows equal to the number of time stamps
# Put the data into the target structure
for i in range(0, 3):
    x[df.iloc[i].start:df.iloc[i].end, df.iloc[i].id] = df.iloc[i].x

2 个答案:

答案 0 :(得分:0)

您可以将numpy arrays用于此类任务(matrix multiplication和其他有用的东西):

import numpy as np
import sys

print("First array: ")

a1 = int(input("No. of rows: "))
b1 = int(input("No. of columns: "))

print("Second array")

a2 = int(input("No. of rows: "))
b2 = int(input("No. of columns: "))

if b1 != a2:
    print("Wrong array size!")
    sys.exit(-1)

array1 = np.zeros((a1,b1))
array2 = np.zeros((a2,b2))

print("Enter first array:")
for x in range(0,a1):
    for y in range(0,b1):
        array1[x,y] = float(input("Enter %d %d: " % (x,y)))

print(array1)

print("Enter second array:")    
for x in range(0,a2):
    for y in range(0,b2):
        array2[x,y] = float(input("Enter %d %d: " % (x,y)))

print(array2)

答案 1 :(得分:0)

python array模块旨在表示一维数组,即列表。它不支持2D或其他更高维度,因为该模块限制了数组元素的数据类型。当您说array1 = array('i', [])时,表示“创建一个仅接受整数值的列表,并以空列表开头”。

如果您不想使用numpy或其他矩阵库,则可以执行以下操作(请参见注释):

print("First array: ")
a = int(input("No. of rows: "))
b = int(input("No. of columns: "))

print("Second array")
x = int(input("No. of rows: "))
y = int(input("No. of columns: "))

if (b == x):
    array1 = []  ## empty 1-D list
    array2 = []
    for i in range(0,a):
        array1.append([])  ## add a row
        for j in range(0,b):
            n1 = int(input("Enter values for first array: "))
            array1[i].append(n1)  ## add a column value to row
    print(array1)
    for i in range(0,x):
        array2.append([])
        for j in range(0,y):
            n2 = int(input("Enter values for first array: "))
            array2[i].append(n2)
    print(array2)