import numpy as np

#构建一个含有一个常数12的0维张量
x = np.array(12)
print(x)
#ndim表示张量的维度
print(x.ndim)

x1 = np.array([11,12,13])
print(x1)
print(x1.ndim)

x2 = np.array([[11,12,13],[14,15,16]])
print(x2)
print(x2.ndim)

W1 = np.array([[1,2],[3,4]])
W2 = np.array([[5,6],[7,8]])
print("W2 - W1 = {0}".format(W2-W1))

def matrix_multiply(x, y):
    #确保第一个向量的列数等于第二个向量的行数
    assert x.shape[1] == y.shape[0]
    #一个m*d维的二维张量与一个d*n的二维张量做乘机后,得到m*n的二维张量
    z = np.zeros((x.shape[0], y.shape[1]))
    for i in range(x.shape[0]):
        #循环第一个向量的每一行
        for j in range(y.shape[1]):
            #循环第二个向量的每一列
            addSum = 0
            for k in range(x.shape[1]):
                addSum += x[i][k]*y[k][j]
            z[i][j] = addSum
    return z
x = np.array([[0.1, 0.3], [0.2,0.4]])
y = np.array([[1],[2]])
z = matrix_multiply(x, y)
print(z)

z = np.dot(x,y)
print(z)

def  naive_relu(x):
    assert len(x.shape) == 2
    x = x.copy() #确保操作不改变输入的x
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            x[i][j] = max(x[i][j], 0)
    return x

x = np.array([[1, -1], [-2, 1]])
print(naive_relu(x))

x = np.array([
    [
      [1,2],
      [3,4]
    ],
    [
      [5,6],
      [7,8]
    ],
    [
      [9, 10],
      [11, 12]
    ]
])
print(x.ndim)

from keras.datasets import mnist

(train_images, train_labels),(test_images, test_labels) = mnist.load_data()
print(train_images.shape)

my_slice = train_images[10:100]
print(my_slice.shape)