Css3 transform matrix()的使用

CSS3中的2D转换中有五种方法:

  • translate()
  • rotate()
  • scale()
  • skew()
  • matrix()

前四种方法比较好理解,而matrix()方法是把上面四种方法组合在一起,从而可以实现类似边平移边翻转的效果;

使用matrix(a,b,c,d,e,f)需要了解矩阵

矩阵

上图得到两个公式
x’=aX+cY+e
y’=bX+dY+f
这两个公式就是元素的新坐标系,(x’,y’)为元素中心。

示例

//样式
<style type="text/css">
    #moving{
        width: 200px;
        height: 200px;
        background-color: red;
        transform: matrix(0,0,0,0,100,100);
    }
</style>
//图形
<div id="moving"></div>

1.使用matrix()平移
平移
上面的公式用参数e和f分别是水平偏移距离和垂直偏移距离。
transform: matrix(0,0,0,0,100,100);
代入公式为:
x’=0*X+0*Y+100
y’=0*X+0*Y+100
元素中心偏移至(100,100)

2.使用matrix()放缩
拉伸
a与d参数是X与Y轴上的比例
transform: matrix(0.5,0,0,0.5,100,100);
代入公式为:
x’=0.5*X+0*Y+100
y’=0*X+0.5*Y+100
元素中心偏移至(100,100),且X,Y轴比例为0.5

3.使用matrix()旋转
matrix(cosθ,sinθ,-sinθ,cosθ,0,0)
旋转
transform: matrix(1,1,-1,1,100,100);
x’=1*X-1*Y+100
y’=1*X+1*Y+100
X轴k值为1,Y轴k值为-1,元素旋转45度

4.使用matrix()拉伸
这里写图片描述
transform: matrix(1,0,1,2,100,100);
x’=1*X+1*Y+100
y’=0*X-2*Y+100

小应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        #moving{
            width: 200px;
            height: 200px;
            background-color: red;
            transform: matrix(0,0,0,0,100,100);
        }
    </style>
</head>
<body>
    <div id="moving"></div>

</body>
    <script type="text/javascript">
    var i = 0;
    function move(){
        var cos = Math.cos(i*Math.PI/180);
        var sin = Math.sin(i*Math.PI/180);
        var div = document.getElementById("moving");
        div.style.borderRadius = i+"%";
        div.style.backgroundColor = "#"+i+"00000";
        div.style.transform = "matrix("+cos+","+sin+","+-sin+","+cos+","+i+",10)";
        i++;
    }
    setInterval("move()",100)
    </script>
</html>

自己试吧。。。。

以下是一个使用CNN模型训练NSL-KDD数据集的Python代码: ```python import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Conv1D, MaxPooling1D from sklearn.preprocessing import LabelEncoder, OneHotEncoder from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix # Load data train_data = pd.read_csv('KDDTrain+.txt', header=None) test_data = pd.read_csv('KDDTest+.txt', header=None) # Define column names columns = ['duration', 'protocol_type', 'service', 'flag', 'src_bytes', 'dst_bytes', 'land', 'wrong_fragment', 'urgent', 'hot', 'num_failed_logins', 'logged_in', 'num_compromised', 'root_shell', 'su_attempted', 'num_root', 'num_file_creations', 'num_shells', 'num_access_files', 'num_outbound_cmds', 'is_host_login', 'is_guest_login', 'count', 'srv_count', 'serror_rate', 'srv_serror_rate', 'rerror_rate', 'srv_rerror_rate', 'same_srv_rate', 'diff_srv_rate', 'srv_diff_host_rate', 'dst_host_count', 'dst_host_srv_count', 'dst_host_same_srv_rate', 'dst_host_diff_srv_rate', 'dst_host_same_src_port_rate', 'dst_host_srv_diff_host_rate', 'dst_host_serror_rate', 'dst_host_srv_serror_rate', 'dst_host_rerror_rate', 'dst_host_srv_rerror_rate', 'label'] # Assign column names to data train_data.columns = columns test_data.columns = columns # Label Encoding categorical_columns = ['protocol_type', 'service', 'flag'] le = LabelEncoder() for col in categorical_columns: train_data[col] = le.fit_transform(train_data[col]) test_data[col] = le.fit_transform(test_data[col]) # One-hot Encoding ohe = OneHotEncoder() train_cat = ohe.fit_transform(train_data[categorical_columns]) test_cat = ohe.fit_transform(test_data[categorical_columns]) # Combine categorical and numerical data train_num = train_data.drop(columns=categorical_columns + ['label']) test_num = test_data.drop(columns=categorical_columns + ['label']) train = np.hstack((train_num.values, train_cat.toarray())) test = np.hstack((test_num.values, test_cat.toarray())) # Convert labels to integers train_labels = np.where(train_data['label'] == 'normal', 0, 1) test_labels = np.where(test_data['label'] == 'normal', 0, 1) # Split data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(train, train_labels, test_size=0.2, random_state=1) # Reshape data for CNN input X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1) X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1) # Define CNN model model = Sequential() model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(X_train.shape[1], 1))) model.add(Conv1D(filters=64, kernel_size=3, activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit model model.fit(X_train, y_train, batch_size=128, epochs=10, validation_data=(X_test, y_test)) # Test model on test set test_pred = model.predict_classes(test.reshape(test.shape[0], test.shape[1], 1)) test_cm = confusion_matrix(test_labels, test_pred) print('Test Accuracy: ', (test_cm[0,0]+test_cm[1,1])/np.sum(test_cm)) ``` 这段代码首先使用pandas库读取NSL-KDD数据集的训练集和测试集,并使用LabelEncoder和OneHotEncoder对分类数据进行编码。然后,将分类数据和数值数据组合起来,并将标签转换为整数。接下来,将数据分成训练集和测试集,并将其reshape成适合CNN模型输入的形状。然后,定义一个简单的CNN模型,并编译并训练模型。最后,用测试集测试模型,并计算测试准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值